我正在尝试使用tikz-3dplot
它来绘制一个立方体,我对定义一个点的可能性特别感兴趣,\tdplotsetcoord
该点允许获得 x/y/z/xz... 坐标。但是当我尝试在主坐标系 (4,4,4) 中定义一个点时tikz-3dplot
(\tdplotsetcoord{P}{sqrt(3)*4}{45}{45}
我认为是这样),我没有得到我期望的结果,如下所示。图中的蓝色和黑色节点应该相同。有什么想法吗?
\documentclass[tikz]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords]
% cube
\tdplotsetcoord{P}{sqrt(3)*4}{45}{45}
\draw[dashed]
(0,0,0) -- (Px)
(0,0,0) -- (Py)
(0,0,0) -- (Pz);
\draw[->]
(Px) -- ++ (1,0,0) node[anchor=north east]{$x$};
\draw[->]
(Py) -- ++(0,1,0) node[anchor=north west]{$y$};
\draw[->]
(Pz) -- ++(0,0,1) node[anchor=south]{$z$};
\draw[thick]
(Pxz) -- (P) -- (Pxy) -- (Px) -- (Pxz) -- (Pz) -- (Pyz) -- (P);
\draw[thick]
(Pyz) -- (Py) -- (Pxy);
\filldraw[dashed,blue] (0,0,0)-- (P) circle (2pt);
\filldraw[dashed] (0,0,0)-- (4,4,4) circle (2pt);
\end{tikzpicture}
\end{document}
答案1
欢迎使用 TeX-SE!计算球面坐标的一种方法(4,4,4)
是求解
(r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),r*sin(theta))=(4,4,4)
由此可得出r=4*sqrt(3)
和phi=45
,正如您所得到的,和theta=asin(sqrt(2/3))
,这与您所得到的有所不同。顺便说一句,您也可以使用库的球面坐标3d
,它们遵循略有不同的约定。以下 MWE 表明结果与上述考虑一致。
\documentclass[tikz]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d}
\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords]
\pgfmathsetmacro{\mytheta}{asin(sqrt(2/3))}
\typeout{\mytheta}
% cube
\tdplotsetcoord{P}{sqrt(3)*4}{\mytheta}{45}
\draw[dashed]
(0,0,0) -- (Px)
(0,0,0) -- (Py)
(0,0,0) -- (Pz);
\draw[->]
(Px) -- ++ (1,0,0) node[anchor=north east]{$x$};
\draw[->]
(Py) -- ++(0,1,0) node[anchor=north west]{$y$};
\draw[->]
(Pz) -- ++(0,0,1) node[anchor=south]{$z$};
\draw[thick]
(Pxz) -- (P) -- (Pxy) -- (Px) -- (Pxz) -- (Pz) -- (Pyz) -- (P);
\draw[thick]
(Pyz) -- (Py) -- (Pxy);
\filldraw[dashed,blue] (0,0,0)-- (P) circle (2pt);
\draw[green!70!black] (4,4,4) circle (3pt);
\draw[red] (xyz spherical cs:radius={4*sqrt(3)},
longitude=45,latitude=90-\mytheta) circle (4pt);
\end{tikzpicture}
\end{document}