如何绘制两个相交的 3D 圆之间的角度

如何绘制两个相交的 3D 圆之间的角度

我是 TikZ 的新手,我正在尝试标记两个相交圆之间的角度,如下图所示,红色部分。 在此处输入图片描述

下面是我目前的代码,它制作了下面的图表, 在此处输入图片描述

\documentclass[border=5pt]{standalone}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords,scale=5]
  \pgfmathsetmacro{\r}{1}
  \pgfmathsetmacro{\O}{60} 
  \pgfmathsetmacro{\i}{45} 

  \coordinate (O) at (0,0,0);
  \tdplotdrawarc[dashed]{(O)}{\r}{0}{360}{}{} %CIRCLE ONE

  \tdplotsetrotatedcoords{-\O}{\i}{0}
  \tdplotdrawarc[tdplot_rotated_coords]{(O)}{\r}{0}{360}{}{} %CIRCLE TWO
\end{tikzpicture}
\end{document}

我很感谢你的帮助!

答案1

欢迎来到 TeX.SE!这里有一个建议。我不知道绝对正确的方法是什么。当然,我知道如何表示平面上两条线之间的角度。但这里我们处理的是两条曲线之间的角度线。它应该在球体上运行吗?如果是这样,那么在一个大圆上?在无限大球体的极限下,这个处方将不是在平面上重现我们的标准惯例,而是会产生一条直线。由于这似乎没有明确定义,我只计算了I两个圆的交点,以及两个圆上距离交点相同距离的点,I1I2。然后我用“看起来正确”的圆弧将它们连接起来。

\documentclass[border=5pt]{standalone}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords,scale=5]
  \pgfmathsetmacro{\r}{1}
  \pgfmathsetmacro{\O}{60} 
  \pgfmathsetmacro{\i}{45} 
  \pgfmathsetmacro{\dang}{-30} 

  \coordinate (O) at (0,0,0);
  \tdplotdrawarc[dashed]{(O)}{\r}{0}{360}{}{} %CIRCLE ONE

  \tdplotsetrotatedcoords{-\O}{\i}{0}
  \tdplotdrawarc[tdplot_rotated_coords]{(O)}{\r}{0}{360}{}{} %CIRCLE TWO

  \path  ({sin(\O)},{cos(\O)},{0}) coordinate (I);
  \path  ({sin(\O+\dang)},{cos(\O+\dang)},{0}) coordinate (I1);
  \path[tdplot_rotated_coords]  ({sin(\dang)},{cos(\dang)},{0})
  coordinate (I2);
  \draw (I1) to[out=95,in=-50] node[pos=0.5,right] {$\i^\circ$} (I2);
\end{tikzpicture}
\end{document}

在此处输入图片描述

这是另一个在原则上可行但在实践中不付出额外努力的提议。如何定义这样的弧?给定点II1I2有一个平面穿过这些点。因此,在圆半径趋于无穷大的极限中重现标准角弧的一个定义是在上述平面中绘制普通弧。这绝对很容易实现如果人们会知道旋转坐标的 3d 坐标。此时,它们没有存储在任何地方,因此接下来会利用您选择开角为 45 度的事实进行近似计算。

\documentclass[border=5pt]{standalone}
\usepackage{tikz,tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[tdplot_main_coords,scale=5]
  \pgfmathsetmacro{\r}{1}
  \pgfmathsetmacro{\O}{60} 
  \pgfmathsetmacro{\i}{45} 
  \pgfmathsetmacro{\dang}{-30} 
  \pgfmathsetmacro{\infang}{3}

  \coordinate (O) at (0,0,0);
  \tdplotdrawarc[dashed]{(O)}{\r}{0}{360}{}{} %CIRCLE ONE

  \tdplotsetrotatedcoords{-\O}{\i}{0}
  \tdplotdrawarc[tdplot_rotated_coords]{(O)}{\r}{0}{360}{}{} %CIRCLE TWO

  \path  ({sin(\O)},{cos(\O)},{0}) coordinate (I);
  \path  ({sin(\O+\dang)},{cos(\O+\dang)},{0}) coordinate (I1);
  \path[tdplot_rotated_coords]  
  ({sin(\dang)},{cos(\dang)},{0})  coordinate (I2);
  \tdplotsetrotatedcoords{-\O}{2*\i}{0}
  \path[tdplot_rotated_coords]  
  ({sin(\dang)},{cos(\dang)},{0})  coordinate (I3);
  \begin{scope}[shift={(I)}]
   \begin{scope}[x={(I1)},y={(I3)}]
     \draw plot[variable=\t,domain=0:42.9] ({pow(cos(\t),1)},{pow(sin(\t),1)});
   \end{scope}
  \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果你觉得这是正确的方法,那么它很可能可以普遍发挥作用。但由于目前对坐标组件的了解不足,这将需要付出相当大的努力。

相关内容