tikz-3dplot:极坐标和笛卡尔坐标之间不一致?(已解决)

tikz-3dplot:极坐标和笛卡尔坐标之间不一致?(已解决)

最近我使用 tikz-3dplot 包来绘制图形,直到我遇到一个非常奇怪的问题。我最终构建了一个最小工作示例来隔离问题并对其进行了完整注释以简化理解。我的观察很简单。在笛卡尔框架中,我使用两种方法绘制一个向量。第一种方法,简单地从其 x、y、z 坐标绘制,第二种方法从其极坐标绘制。使用数值,这两个向量 P 和 M(或 N,使用另一种方法)必须绘制为与 (1,1,1) 向量共线的向量。但事实并非如此!也许我做错了什么???

\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\include{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{120}
\begin{tikzpicture}[tdplot_main_coords]
% Origin
\coordinate (O) at (0,0,0) node[above left=1.0mm]{\large$O$};
% Point P, polar coordinates
\pgfmathsetmacro{\Prho}{5} %
\pgfmathsetmacro{\Ptheta}{45} %
\pgfmathsetmacro{\Pphi}{45} %
\tdplotsetcoord{P}{\Prho}{\Ptheta}{\Pphi};
% Drawt P as a vector
\draw[very thick,-latex,color=red] (O) -- (P) node[above left]{$P$};
% Draw P projection on xy plane
\draw[thick,dotted,color=red] (P) -- (Pxy) -- (O);
% Adjust frame axis lengthes (cosmetic)
\pgfmathsetmacro{\X}{\Prho+4}
\pgfmathsetmacro{\Y}{\Prho+1}
\pgfmathsetmacro{\Z}{\Prho+1.5}
% Cartesian frame
\draw[thick,-latex] (O) -- (\X,0,0) node[anchor=north east]{$x$};
\draw[thick,-latex] (O) -- (0,\Y,0) node[anchor=north west]{$y$};
\draw[thick,-latex] (O) -- (0,0,\Z) node[anchor=south]{$z$};
% Point M : cartesian coordinates
\pgfmathsetmacro{\ax}{\Prho*cos(45)}
\pgfmathsetmacro{\ay}{\Prho*cos(45)}
\pgfmathsetmacro{\az}{\Prho*cos(45)}
% Draw M
\draw[thick,-latex,color=blue] (O) -- (\ax,\ay,\az) node[above right]{$M$};
% Point N : compute its polar coordinates from M coordinates
\pgfmathsetmacro{\Nrho}{sqrt(\ax*\ax + \ay*\ay + \az*\az)}
\pgfmathsetmacro{\Ntheta}{acos(\az/\Nrho)}
\pgfmathsetmacro{\Nphi}{atan2(\ay, \ax)}
% Define and draw N using the preceding definitions
\tdplotsetcoord{N}{\Nrho}{\Ntheta}{\Nphi};
\draw[very thick,-latex,color=blue] (O) -- (N) node[below right]{$N$};
% Draw projection of N on xy plane
\draw[thick,dotted,color=blue] (N) -- (Nxy) -- (O);
% Draw the arc for phi on xy plane
\tdplotdrawarc[thick,-latex,color=blue]{(O)}{\Prho}{0}{45} {below,color=black} {$\phi=45$}
% Second method : compute for N its polar coordinates
\tdplotgetpolarcoords{\ax}{\ay}{\az}
% Arc for beta of P on (phi, z)  plane
\tdplotsetthetaplanecoords{\tdplotresphi}
\tdplotdrawarc[tdplot_rotated_coords,thin,-latex,color=red]{(O)}{\Prho}{0}{45} {left,color=black} {$45 = \theta$}
% Arc for beta of M or N on (phi, z)  plane
\tdplotdrawarc[tdplot_rotated_coords,thin,-latex,blue]{(O)}{6}{0} {\tdplotrestheta}{right,color=black}{$\theta' = \tdplotrestheta$}
\end{tikzpicture}
\end{document}

帕特里克

请参阅文本解释

答案1

Juan,你理解我的问题是正确的,你是对的,(1,1,1) 和 3 轴之间的 3 个角度是 54.73914°,而不是 45°。那么向量 P 和 M 就不共线了。对不起。直觉可能不是个好主意。非常感谢。但是,我不得不建立一个简单的程序来验证这是否正确。我无法在 tikz-3dplot 中找到等效项,因此我将其提供给所有人。它在 3d 中显然有效:

\newcommand\AngleOfTwoVectors[6]{%
  \pgfmathsetmacro{\VectorNormU}{sqrt(#1*#1 + #2*#2 + #3*#3)}%
  \pgfmathsetmacro{\VectorNormV}{sqrt(#4*#4 + #5*#5 + #6*#6)}%
  \pgfmathsetmacro{\ScalarProduct}{#1*#4 + #2*#5 + #3*#6}%
  \pgfmathsetmacro{\AOTVtheta}{acos(\ScalarProduct/(\VectorNormU*\VectorNormV))}
  Angle of vectors (#1, #2, #3) and (#4, #5, #6) : \AOTVtheta\\
}

再次感谢,

帕特里克

该问题可以标记为[已解决]。

相关内容