我正在使用 TikZ(带有 3dplot 包)绘制图形,这些图形主要表示位于 2-Spheres 表面上的矢量。我不得不说,我对 TikZ 有点陌生,但我认为我掌握了基本概念。
在这个 MWE 中,我画了一个有 3 个单位长度向量的图形米,n和升(和米正交于两者升和n)我也有一个观点X位于连接米和升及其正交投影经验在n,米飞机。
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\begin{document}
\begin{figure}[ht]
\centering
\tdplotsetmaincoords{70}{135}
\pgfmathsetmacro{\rvec}{1}
\pgfmathsetmacro{\thetavec}{320}
\pgfmathsetmacro{\phivec}{240}
\begin{tikzpicture}[tdplot_main_coords, scale=8]
\coordinate (O) at (0,0,0);
\draw[thick,->] (O) -- (0,\rvec,0) node[anchor=north west]{$\mathbf{n}$};
\draw[thick,->] (O) -- (0,0,\rvec) node[anchor=south]{$\mathbf{m}$};
\tdplotsetcoord{X}{\rvec}{\thetavec}{\phivec};
\tdplotsetcoord{L}{\rvec}{270}{\phivec}
\draw[thick,->] (O) -- (X) node[anchor=east]{$\mathbf{x}$};
\draw[thick,->] (O) -- (L) node[anchor=east]{$\mathbf{l}$};
\draw[thick,->] (O) -- (Xyz) node[anchor=south east]{$\mathbf{x_p}$};
\draw[dashed] (X) -- (Xyz);
\tdplotsetthetaplanecoords{90};
\tdplotdrawarc[tdplot_rotated_coords, style=dashed]{(O)}{\rvec}{0}{90}{}{};
\tdplotsetthetaplanecoords{\phivec};
\tdplotdrawarc[tdplot_rotated_coords, style=dashed]{(O)}{\rvec}{-90}{0}{}{};
\end{tikzpicture}
\end{figure}
\end{document}
我的问题是:是否可以画一条线连接经验到它在球面上的投影?或者,从原点开始到投影处结束的一条线经验在球体上?
在另一个情况下,我会简单地进行 L2 标准化经验到单位长度,但在 TikZ 中这似乎不是一个可行的选择(如果我错了,请纠正我)。
为了更好地理解,图片展示了我正在寻找的东西:那个非常丑陋的红色部分。
感谢您的时间,对于您偶尔的蹩脚英语,深表歉意!
答案1
我应该提到,P 是使用屏幕坐标定义的。您需要将屏幕坐标投影到适当的平面上才能获得 3D 坐标。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{tikz-3dplot}
\begin{document}
\begin{figure}[ht]
\centering
\tdplotsetmaincoords{70}{135}
\pgfmathsetmacro{\rvec}{1}
\pgfmathsetmacro{\thetavec}{320}
\pgfmathsetmacro{\phivec}{240}
\begin{tikzpicture}[tdplot_main_coords, scale=8]
\coordinate (O) at (0,0,0);
\draw[thick,->] (O) -- (0,\rvec,0) node[anchor=north west]{$\mathbf{n}$};
\draw[thick,->] (O) -- (0,0,\rvec) node[anchor=south]{$\mathbf{m}$};
\tdplotsetcoord{X}{\rvec}{\thetavec}{\phivec};
\tdplotsetcoord{L}{\rvec}{270}{\phivec}
\draw[thick,->] (O) -- (X) node[anchor=east]{$\mathbf{x}$};
\draw[thick,->] (O) -- (L) node[anchor=east]{$\mathbf{l}$};
\draw[thick,->] (O) -- (Xyz) node[anchor=south east]{$\mathbf{x_p}$};
\draw[dashed] (X) -- (Xyz);
\tdplotsetthetaplanecoords{90};
\tdplotdrawarc[tdplot_rotated_coords, style=dashed]{(O)}{\rvec}{0}{90}{}{};
\tdplotsetthetaplanecoords{\phivec};
\tdplotdrawarc[tdplot_rotated_coords, style=dashed]{(O)}{\rvec}{-90}{0}{}{};
\path[name path=line1] (O) -- ($(O)!2!(Xyz)$);% extended line
\tdplotsetthetaplanecoords{90};
\path[tdplot_rotated_coords, name path=arc1] (O) circle (\rvec);% extended arc
\path[name intersections={of=line1 and arc1}]
coordinate (P) at (intersection-1);
\draw[red,thick] (Xyz) -- (P);% could have combined the two steps
\end{tikzpicture}
\end{figure}
\end{document}