tikz-3dplot:找到一个向量在单位球面上的投影

tikz-3dplot:找到一个向量在单位球面上的投影

我正在使用 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}

路口

相关内容