我正在尝试绘制一个粒子并可视化粒子的旋转。到目前为止,我已经完成了以下操作:
\begin{tikzpicture}
\def\r{1.5} % Radius des Kreises
\filldraw[top color=red,bottom color=green,draw=black,thick] (0,0) circle (\r); % Kreis
\draw[thick,-{Latex[length=2mm]}] (0,\r) -- (0,2*\r) node[above] {$\vec{\mu}$}; % Pfeil durch die Mitte
\draw[thick] (0,-1.5*\r) -- (0,-\r);
\draw[thick,->] (-1.5*\r,0) to[bend right=45] (1.5*\r,0) node[below right] {$\vec{\omega}$}; % gebogener Pfeil
\end{tikzpicture}
编译如下此图片:
但是,我对表示粒子旋转的箭头并不满意。我猜箭头的起点和终点需要改为 (\r,135°) 和 (\r,45°) 这样的坐标,才能看起来更像三维图形。但是,由于钛钾是没有使用极坐标,计算笛卡尔坐标根本没有给我任何输出。
有没有简单的方法可以做到这一点?我这里是否遗漏了一个关键命令?
答案1
最好使用一些 3D 引擎,例如 Ti钾Zperspective
库。
你可以做这样的事情:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{perspective}
\begin{document}
\begin{tikzpicture}[3d view={30}{20}]
\draw[thick] (0,0,-2) -- (0,0,-4);
\draw[
top color=red,bottom color=green,
%shading=ball,ball color=red % <-- alternative
] (0,0,0) circle (2cm);
\draw[thick,-latex] (0,0,2) -- (0,0,4) node[above] {$\vec\mu$};
\draw[-latex] (180:3) arc (180:420:3) node[above] {$\vec\omega$};
% uncomment to show the 3d plane
%\draw (-3.1,1) -- (-3.1,-3.1) -- (3.1,-3.1) -- (3.1,3.1) -- (1,3.1);
\end{tikzpicture}
\end{document}
更新 1:一个更好看的选择(IMHO):
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{perspective}
\begin{document}
\begin{tikzpicture}[3d view={30}{20}]
\draw[thick] (0,0,-2) -- (0,0,-4);
\begin{scope}[blend group=screen]
\draw[top color=red,bottom color=green] (0,0,0) circle (2cm);
\draw[shading=ball,ball color=red] (0,0,0) circle (2cm);
\end{scope}
\draw[thick,-latex] (0,0,2) -- (0,0,4) node[above] {$\vec\mu$};
\draw[-latex] (180:3) arc (180:420:3) node[above] {$\vec\omega$};
\end{tikzpicture}
\end{document}
更新 2:另一个,分隔球体的上下部分。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{perspective}
\begin{document}
\begin{tikzpicture}[isometric view,rotate around z=180]
\draw[thick] (0,0,-2) -- (0,0,-4);
\begin{scope}[blend group=screen]
\draw[fill=red] (-45:2) arc (-45:135:2) arc (0:180:2cm);
\draw[fill=green] (-45:2) arc (-45:135:2) arc (0:-180:2cm);
\draw[shading=ball,ball color=gray!30!black] (0,0,0) circle (2cm);
\end{scope}
\draw[thick,-latex] (0,0,2) node[right] {$N$} -- (0,0,4) node[above] {$\vec\mu$};
\draw[-latex] (-60:3) arc (-60:150:3) node[above] {$\vec\omega$};
\node[right] at (0,0,-2.5) {$S$};
\end{tikzpicture}
\end{document}
答案2
不使用任何 3d 工具,您可以用极坐标(θ:r)
(注意极坐标的冒号)作为起始位置和绘制一个圆弧arc(θ₁:θ₂:r)
。然后更改yscale
为椭圆弧。
shorten <=
另外,使用负值延长从北极出来的矢量。
\begin{tikzpicture}
\def\r{1.5} % Radius des Kreises
\filldraw[top color=red,bottom color=green,draw=black,thick] (0,0) circle (\r); % Kreis
\draw[thick,-{Latex[length=2mm]}, shorten <=-2mm] (0,\r) -- (0,2*\r) node[above] {$\vec{\mu}$}; % Pfeil durch die Mitte
\draw[thick] (0,-1.5*\r) -- (0,-\r);
\draw[thick,->, yscale=.3] (135:1.5*\r) arc(135:405:1.5*\r) node[above right] {$\vec{\omega}$}; % gebogener Pfeil
\end{tikzpicture}
答案3
更新: 渐近线用一些调色板。你可以玩nolight
,以及 中的数字,例如, Rainbow(5)
// http://asymptote.ualberta.ca/
import three;
import palette;
unitsize(1cm);
currentprojection=orthographic(3X+Z);
//currentlight=nolight; // turn on or off
surface s=scale3(1.5)*unitsphere;
s.colors(palette(s.map(zpart),Rainbow()));
draw(s);
draw(Label("$\vec{\omega}$",align=N,EndPoint),
arc(O,-2X-2Y,2Y-2X,CW),black+.8pt,Arrow3);
draw(Label("$\vec{\mu}$",align=N,EndPoint),
-3Z--3Z,black+.8pt,Arrow3);
渐近线颜色均匀。
// http://asymptote.ualberta.ca/
import three;
unitsize(1cm);
currentprojection=orthographic(3,3,2);
real r=1.5;
draw(scale3(r)*unitsphere,green+opacity(.7));
draw(Label("$\vec{\omega}$",align=N,EndPoint),
arc(O,2X-Y,2Y-X),black+.8pt,Arrow3);
draw(Label("$\vec{\mu}$",align=N,EndPoint),
-3Z--3Z,black+.8pt,Arrow3);
答案4
这是另一种方法,我使用了shadings
库,另一行代码很简单,与上面的答案非常相似:
\documentclass[tikz, border=20mm]{standalone}
\usepackage{amsmath,amssymb}
\usetikzlibrary{shadings}
\begin{document}
\begin{tikzpicture}[>=stealth]
\draw[thick] (0,-3)--(0,0);
\shade[top color=green, bottom color=red] (0,0)circle(1.5);
\draw[thick] (0,0)circle(1.5);
\draw[thick, ->] (0,1.45)--(0,3) node[left] {$\vec{\mu}$};
\draw[thick, ->] (180:1.75)arc[start angle=135, end angle=405, x radius=2.5cm, y radius =0.25cm] node[above right] {$\vec{\omega}$};
\end{tikzpicture}
\end{document}