正确地在球体内绘制平行线(或经线)的圆弧

正确地在球体内绘制平行线(或经线)的圆弧

我得到了这个代码:

\begin{tikzpicture}

    \draw (0,0) circle (3);
    
    \draw[dashed] (({3*cos(45)},{3*sin(45)}) arc (0:180:{3*cos(45)} and 0.7);
    \draw (({3*cos(45)},{3*sin(45)}) arc (0:-180:{3*cos(45)} and 0.7);
    
    \draw[dashed] (({3*cos(30)},{3*sin(30)}) arc (0:180:{3*cos(30)} and 0.7);
    \draw (({3*cos(30)},{3*sin(30)}) arc (0:-180:{3*cos(30)} and 0.7);
    
    \draw[dashed] (3,0) arc (0:180:3 and 0.7);
    \draw (3,0) arc (0:-180:3 and 0.7);
    
    \draw[dashed] (({3*cos(-30)},{3*sin(-30)}) arc (0:180:{3*cos(-30)} and 0.7);
    \draw (({3*cos(-30)},{3*sin(-30)}) arc (0:-180:{3*cos(-30)} and 0.7);
    
\end{tikzpicture}

生成以下球体:

在此处输入图片描述

我的问题是:为什么弧线的边界稍微超出球体?有没有办法解决这个问题,以便我可以让这些弧线位于球体边界内?当然,我知道我可以手动开始测试弧线半径的值来实现我的目标,但我想要一个通用的解决方案。

谢谢!

答案1

这个问题的评论中提供了很好的提示,用于在 3d 中绘制球体及其平行线。但如果只需要平行线,那么有一种简单的方法可以在 2d 中完成。

下面的代码

\documentclass[border=2mm]{standalone}
\usepackage{tikz}

\def\r{2}   % sphere radius
\def\k{0.7} % ratio between ellipse axes b/a, 0<k<1
\def\n{31}  % number of parallels to draw, n>1
\pgfmathsetmacro\f{sqrt(1-\k*\k)} % relation between a tangent point and its height
\begin{document}
\begin{tikzpicture}
  \foreach\i in {1,...,\n}
  {%
    \pgfmathsetmacro\h{(\i/(\n+1)-0.5)*2*\r*\f}                   % parallel height
    \pgfmathsetmacro\y{\h/\f/\f}                                  % tangent point y
    \pgfmathsetmacro\a{sqrt(\r*\r-\y*\y+(\y-\h)*(\y-\h)/(\k*\k))} % semi-major axis
    \pgfmathsetmacro\b{\k*\a}                                     % semi-minor axis
    \begin{scope} % front parallels, both spheres
      \clip (-\r,\y)  rectangle (3.5*\r,-\r);
      \draw (0,\h)      ellipse (\a cm and \b cm); % left  sphere (parallels)
      \draw (2.5*\r,\h) ellipse (\a cm and \b cm); % right sphere (parallels)
    \end{scope}
    \begin{scope} % back parallels, right sphere
      \clip (-\r,\y) rectangle (3.5*\r,\r);
      \draw[thin,gray!50] (2.5*\r,\h) ellipse (\a cm and \b cm);
    \end{scope}
  }
  \draw[thick,red] (0,0)      circle (\r); % left  sphere
  \draw[thick,red] (2.5*\r,0) circle (\r); % right sphere
\end{tikzpicture}
\end{document}

生成: 在此处输入图片描述

数学提示
x^2+y^2=r^2是球体的二维投影,x^2/a^2+(y-h)^2/b^2=1是高度为的平行线的二维投影h。固定b=kak定(所有椭圆的轴比必须相同k)。假设两条曲线都有一个公共切点(例如,取导数并使其相等),我们得到y该切点坐标的表达式。然后我们找到a(半长轴)的值,使得椭圆通过该点。现在,由于b=ka,我们有了椭圆的方程。我们也可以计算绘制弧的角度,而不是剪切椭圆,但在这种情况下,我认为剪切比数学更容易。

相关内容