![pgf 图中 3D 球面坐标系](https://linux22.com/image/336623/pgf%20%E5%9B%BE%E4%B8%AD%203D%20%E7%90%83%E9%9D%A2%E5%9D%90%E6%A0%87%E7%B3%BB.png)
我刚刚学习了 pgf-plots 中的 3d 矩形图,现在我需要在球面坐标中绘制图形。我一直在阅读手册,但找不到答案。有没有一种简单的方法来绘制诸如 rho=1+sin(theta)*sin(phi) 之类的东西。谢谢你的帮助。
\begin{tikzpicture}
\begin{axis}[
xmin=-5,xmax=5,
ymin=-5,ymax=5,
zmin=-5,zmax=5,
xlabel={$x$},
ylabel={$y$},
zlabel={$z$},
zlabel style={rotate=90},
view={75}{20}]
addplot3[surf,opacity=0.75,domain=-360:360,y domain=-360:360,samples=20]({x},{y},{1+0.2*sin(x)*sin(y)});
\end{axis}
\end{tikzpicture}
答案1
您可以在常规语法中使用参数方程
\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.13,colormap/viridis}
\begin{document}
\begin{tikzpicture}
\begin{axis}[trig format=rad,view={40}{45}]
\addplot3+[no marks,mesh,domain=-pi/2:pi/2,y domain=0:2*pi,samples=61,samples y=61]
({cos(x)*cos(y)},{cos(x)*sin(y)},{1 + 0.2*sin(x)*sin(y)});
\end{axis}
\end{tikzpicture}
\end{document}
对于更复杂的情况,基本上,您必须制作一个小型解析器或将其发送到更强大的语法处理程序,这gnuplot
是一个非常好的选择。您必须确保 gnuplot 位于系统路径上,并且您的编辑器使用选项调用 TeX -shell-escape
(或-enable-write18
在 Windows 上)进行通信gnuplot
。
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13,colormap/viridis}
\begin{document}
\begin{tikzpicture}
\begin{axis}%[view={-40}{45}]
\addplot3+[no marks,mesh,raw gnuplot,samples=] gnuplot {
r = 1;
set samples 101;
set parametric;
set urange [0:2*pi];
set vrange [-pi/2:pi/2];
fx(v,u) = r*cos(v)*cos(u);
fy(v,u) = r*cos(v)*sin(u);
fz(v,u) = r + 0.2*sin(u)*sin(v);
splot fx(v,u),fy(v,u),fz(v,u);
};
\end{axis}
\end{tikzpicture}
\end{document}