我正在创建简单的坐标变换以便\tdplotsetcoord
在笛卡尔坐标系中定义坐标。
梅威瑟:
\documentclass[a4paper,fleqn,leqno]{article}
\usetikzlibrary{arrows.meta,decorations.markings}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\begin{tikzpicture}[cm={-1,-1,1,0,(0,0)},x=3.85mm,z=-1cm]
\draw[-{Classical TikZ Rightarrow[scale=1.2]},very thick] (-2,0,0) -- (5,0,0) node[anchor=north,xshift=-3pt] {$x$};
\draw[-{Classical TikZ Rightarrow[scale=1.2]},very thick] (0,-2,0) -- (0,5,0) node[anchor=west] {$y$};
\draw[-{Classical TikZ Rightarrow[scale=1.2]},very thick] (0,0,-2) -- (0,0,5) node[anchor=south] {$z$};
\def\Xx{-2} \def\Xy{1} \def\Xz{4}
\tdplotsetcoord{X}{sqrt((\Xx)^(2) + (\Xy)^(2) + (\Xz)^(2))}{acos(\Xz/(sqrt((\Xx)^(2) + (\Xy)^(2) + (\Xz)^(2))))}{asin(\Xy/(sqrt((\Xx)^(2) + (\Xy)^(2))))} % {ρ}{θ}{Φ}
\draw[-{Stealth[scale=1.5,width=3pt]},color=gray,semithick] (0,0,0) -- (X);
\draw[dashed,color=red] (0,0,0) -- (Xxy);
\draw[dashed,color=red] (Xxy) -- (X);
\end{tikzpicture}
\end{document}
球面坐标radius ρ
和polar angle θ
工作正常(在它们的整个范围内运行),但asimuthal angle Φ
显然不是 - 它将x
我的 CC 中的负值视为正值。因此,每个转换为 SC 的坐标都具有非负值x
。
问题也可能在范围内arcsine
。它可能只在总的一部分上运行。我知道我必须asin
根据符号组合定义更广泛的范围x,y
才能获得总asimuthal angle Φ
范围(max - min = 2\pi
)。
问题 1:我想知道如何才能找到 Latex 的默认范围asin
。
问题2:我怎样才能(粗略地)定义arcsine
我所说的更广泛的范围?我希望代码尽可能简单。
谢谢。
答案1
该arcsin
函数的范围为从-pi/2
到pi/2
弧度或-90
到90
度。后者由pgf
包使用。这回答了您的第一个问题。
要计算笛卡尔点的极角(这里最好称为方位角)(x,y)
,可以使用以下公式:
此极角的范围是从-pi
到pi
或-180
度到180
度。可以将360
度数添加到负数中以仅获得正值,但这与应用程序无关。在代码中,这给出:
\documentclass[a4paper,fleqn,leqno]{article}
\usepackage{tikz,tikz-3dplot}
\usetikzlibrary{arrows.meta,decorations.markings}
\begin{document}
\begin{tikzpicture}[cm={-1,-1,1,0,(0,0)},x=3.85mm,z=-1cm]
\draw[-{Classical TikZ Rightarrow[scale=1.2]},very thick] (-2,0,0) -- (5,0,0) node[anchor=north,xshift=-3pt] {$x$};
\draw[-{Classical TikZ Rightarrow[scale=1.2]},very thick] (0,-2,0) -- (0,5,0) node[anchor=west] {$y$};
\draw[-{Classical TikZ Rightarrow[scale=1.2]},very thick] (0,0,-2) -- (0,0,5) node[anchor=south] {$z$};
\def\Xx{-2} \def\Xy{1} \def\Xz{4}
%
\pgfmathsetmacro\radius{sqrt(\Xx*\Xx + \Xy*\Xy + \Xz*\Xz)}%
\pgfmathsetmacro\azimuth{acos(\Xx/sqrt(\Xx*\Xx+\Xy*\Xy))}% part 1
\pgfmathsetmacro\azimuth{ifthenelse(\Xy<0,-\azimuth,\azimuth)}% part 2
\tdplotsetcoord{X}
{\radius}
{acos(\Xz/\radius)}
{\azimuth}
%
\draw[-{Stealth[scale=1.5,width=3pt]},color=gray,semithick] (0,0,0) -- (X);
\draw[dashed,color=red] (0,0,0) -- (Xxy);
\draw[dashed,color=red] (Xxy) -- (X);
\end{tikzpicture}
\end{document}
这样,输出就是: