用tikz畫球座標系下的體積微元

2021-10-03 14:40:35 字數 3555 閱讀 8362

最近上傳熱學,上來第一道作業就是球座標系下導熱微分方程的推導,我想著既然推導嘛,總得從畫個好看的圖開始?就在網上找了一下球座標系**積微元的圖,怎麼說呢,大多數都不怎麼清晰,而且考慮到可能還要在圖中做標註,網上的圖果然不是很滿意。 

那就自己用咱們萬能的繪圖工具tikz繪製乙個?想法是可以的,但是3d的我之前完全沒有畫過啊,不管他,先去texample找找。3d的例子是挺多的,但是乙個容易懂的**才是最好的。

這個包的繪圖思路包括主要是兩種,一種是在主座標系(tdplot_mian_coords)下的xoy平面繪圖,另一種是在旋轉後的座標系(tdplot_rotated_coords)下的xoy平面內繪圖。旋轉的引數可以用命令\tdplotsetrotatedcoord由尤拉角確定(但要注意的是這裡的尤拉角是'zyz'形式!在計算時要注意)。在座標系coord下以o為圓心,r為半徑畫圓弧的命令是\tdplotdrawarc[coords]。

畫出來的效果如下圖 ,嗯,怎麼說,挺舒服的。

附上畫圖的latex**:

\documentclass

\usepackage

\usepackage

\usepackage

\usepackage[active,tightpage]

\previewenvironment

\setlength\previewborder

\begin

\tdplotsetmaincoords

\pgfmathsetmacro

\pgfmathsetmacro

\pgfmathsetmacro

\pgfmathsetmacro

\pgfmathsetmacro

\pgfmathsetmacro

\begin[scale=5,tdplot_main_coords]

\coordinate (o) at (0,0,0);

\tdplotsetcoord

\tdplotsetcoord

\tdplotsetcoord

\tdplotsetcoord

\tdplotsetcoord

\tdplotsetcoord

\tdplotsetcoord

\tdplotsetcoord

\draw[thick,->] (0,0,0) -- (0.8,0,0) node[anchor=north east];

\draw[thick,->] (0,0,0) -- (0,0.8,0) node[anchor=north west];

\draw[thick,->] (0,0,0) -- (0,0,0.8) node[anchor=south];

\draw[-stealth,color=red] (o) -- (a) node[midway, anchor = south, color=black];

\draw[color=red] (o) -- (b);

\draw[dashed, color=red] (o) -- (c);

\draw[dashed, color=red] (o) -- (d);

\draw[dashed, color=red] (o) -- (axy);

\draw[dashed, color=red] (a) -- (axy);

\draw[dashed, color=red] (o) -- (dxy);

\draw[dashed, color=red] (d) -- (dxy);

\draw(a) -- (e) node[midway, anchor = south, color=black];

\draw(b) -- (f);

\draw[dashed](c) -- (g);

\draw[dashed](d) -- (h);

\tdplotdrawarc

\tdplotdrawarc

\tdplotsetthetaplanecoords

\tdplotdrawarc[tdplot_rotated_coords]

\tdplotdrawarc[tdplot_rotated_coords]

\tdplotdrawarc[tdplot_rotated_coords]{}{}

\tdplotdrawarc[tdplot_rotated_coords]{}{}

\tdplotsetthetaplanecoords

\tdplotdrawarc[dashed, tdplot_rotated_coords]{}{}

\tdplotdrawarc[tdplot_rotated_coords]{}{}

\tdplotsetrotatedcoords

\tdplotdrawarc[dashed, tdplot_rotated_coords]{}{}

\tdplotdrawarc[tdplot_rotated_coords]{}{}

\tdplotsetrotatedcoords

\tdplotdrawarc[dashed, tdplot_rotated_coords]{}{}

\tdplotdrawarc[tdplot_rotated_coords]{}{}

\end

\end

留心的朋友們應該注意到了,我在進行座標旋轉的時候,尤拉角是魔數!!!

其實這是因為它採用的zyz的尤拉角的緣故,這裡如果是zyx的尤拉角我們可以直介面算並用a點方位φ和θ以及d(r, θ, φ+dφ)來表示,但這個zyz型的,寫解析解過於麻煩(這可能也是為什麼我找不到別人貼這個體積微元畫法的**的緣故吧?),這裡我是用matlab根據φ和θ計算得到的,也一併放上來。

function eul = geteul(theta, phi, dp)

az=deg2rad(phi);

el=deg2rad(90-theta);

daz = deg2rad(dp);

aa = [az az + daz];

ee = [el el];

rr = [1 1];

[xx,yy,zz]=sph2cart(aa,ee,rr);

p1 = [xx(1); yy(1); zz(1)];

p2 = [xx(2); yy(2); zz(2)];

e23 = cross(p1, p2);

e23 = e23/norm(e23);

e22 = cross(e23, p1);

e0 = [1 0 0;

0 1 0;

0 0 1];

rotm = [p1 e22 e23]/e0;

eul = rotm2eul(rotm, 'zyz');

eul = rad2deg(eul);

end

本來寫的那版matlab**還附加計算了∠aod(這個在原來latex**裡也是魔數)的,但想起來寫部落格的時候已經找不到了,就只草草寫了乙個算尤拉角的,畢竟現在知道了a(matlab**中p1)、d(matlab**中p2)算夾角也挺簡單。

算符在球座標系 球座標系中的角動量算符

預備知識 角動量 量子 本文使用原子單位制 在量子力學中,我們一般把角動量算符放在球座標中表示 把軌道角動量算符在直角座標系中的定義 式 2 通過鏈式法則用球座標表示 留作習題 begin l x mathrm left sin phi frac cot theta cos phi frac rig...

雙球座標系 天球中兩個經典座標系的換算

漫天繁星的星空總是讓人嚮往,誒誒誒,你可等會兒吧,城市裡哪兒來的滿天繁星啊?害,沒見過沒關係,只要基礎的幾個亮星能看見就行。但是每天地球在動 自轉和公轉 星星還那麼多,那那群天文愛好者或者是天文學家是如何辨認每顆星星的呢 不會搞錯嗎?當然在現如今的世界上,觀星可以靠計算機軟體代替而且就現在來講,還多...

直角座標系下點繞點旋轉的座標計算

直角座標系下一點 x 0,y0 繞某一點 x y 逆時針旋轉角度 後的座標 x 1,y1 的座標計算公式為x1 x0 x c os y 0 y sin x y1 x0 x si n y0 y c os y 這裡舉乙個小例子,藍色箭頭表示原始位置,紅色箭頭表示順時針旋轉2.259弧度後的結果。這裡列出...