TikZ:倒锥体(类似于链接线程但问题不同)

TikZ:倒锥体(类似于链接线程但问题不同)

如何用 TikZ 绘制一个具有高度和半径的简单圆锥体?

在上面的线程中,创建了一个圆锥体。但是,如果我反转圆锥体,从原点到圆锥边缘的线会穿过圆锥体。这在视觉上并不美观。我怎样才能让线只与圆锥相交而不(\pm 2, 3)穿过椭圆开口?

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\usetikzlibrary{shadings}

\begin{document}
\begin{tikzpicture}
  \coordinate (h) at (0, 3);
  \coordinate (O) at (0, 0);

  \draw (O) -- +(0, 4);
  \draw (O) -- +(3, 0);
  \draw (O) -- +(-3, 0);

  \fill[
  top color = gray!50,
  bottom color = gray!10,
  shading = axis,
  opacity = 0.25
  ]
  (h) ellipse[x radius = 2, y radius = 0.5];
  \fill[
  left color = gray!50!black,
  right color = gray!50!black,
  middle color = gray!50,
  shading = axis,
  opacity = 0.25
  ]
  (2, 3) -- (O) -- (-2, 3) arc[x radius = 2, y radius = .5, start angle = 180,
  end angle = 360];

  \draw (-2, 3) arc[x radius = 2, y radius = .5, start angle = 180,
  end angle = 360] -- (O) -- cycle;
  \draw[dashed] (-2, 3) arc[x radius = 2, y radius = .5, start angle = 180,
  end angle = 0];
\end{tikzpicture} 
\end{document}

在此处输入图片描述

答案1

我想你想要做的是找到一条从圆锥尖端开始与椭圆相切的线。

让我们来算一下。设r1为椭圆的水平半径,设r2为垂直半径。设z为圆锥尖端到椭圆中点的距离。我们有以下情况:

在此处输入图片描述

这里,O是原点,P是圆锥的尖端,S是直线与椭圆的切点,alpha是横轴与线段 的夹角OS, 向量v是点 处椭圆的法向量S

我们希望向量PS垂直于向量v。我使用 LaTeX 完成其余的数学运算:(不幸的是,tex.stackexchange.com 没有启用 LaTeX 公式。)

在此处输入图片描述

请注意,有趣的是,所需角度不取决于r2!奇怪的是,所需角度是三角形的角度,其对角边的长度为z,其对角边的长度为r2。对此一定有一个更简单的证明(使用全等三角形?)。但现在已经过了睡觉时间,所以我会把它留作练习 :)

在您的特定情况下,您有r2 = 0.5z = 3。这给出了alpha = 9.594度数。这意味着您应该从圆锥的尖端到点(pm 2 * cos(9.594), 3 - 0.5 * sin(9.594))=画一条线(1.972, 2.91666),而不是像(2, 3)现在这样到 。

这段代码应该可以让你开始:

\documentclass[tikz]{standalone}

\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
  \def\rx{2}    % horizontal radius of the ellipse
  \def\ry{0.5}  % vertical radius of the ellipse
  \def\z{3}     % distance from center of ellipse to origin

  \pgfmathparse{asin(\ry/\z)}
  \let\angle\pgfmathresult

  \coordinate (h) at (0, \z);
  \coordinate (O) at (0, 0);     
  \coordinate (A) at ({-\rx*cos(\angle)}, {\z-\ry*sin(\angle)});
  \coordinate (B) at ({\rx*cos(\angle)}, {\z-\ry*sin(\angle)});

  \draw[fill=gray!50] (A) -- (O) -- (B) -- cycle;
  \draw[fill=gray!30] (h) ellipse ({\rx} and {\ry});
\end{tikzpicture} 
\end{document}

rx对于、ry和的不同值,有许多示例输出z

在此处输入图片描述

答案2

使用包 可以解决这个问题intersections。可以很容易地证明,锥尖的垂直位置y'和椭圆上切点的垂直位置很容易与椭圆的y0垂直半径联系起来,如下所示ry

y' * y0 = ry * ry

在此处输入图片描述

因此,您所要做的就是绘制椭圆、适当的(红色)线并找到交点,如下例所示

\documentclass[tikz]{standalone}

\usetikzlibrary{intersections}

\begin{document}
\begin{tikzpicture}
\def\rx{2}    % horizontal radius of the ellipse
\def\ry{0.5}  % vertical radius of the ellipse
\def\z{3}     % distance from center of ellipse to origin

\path[name path=ellipse] (0,\z) ellipse ({\rx} and {\ry});
\path[name path=horizontal] (-\rx,\z-\ry*\ry/\z) -- (\rx,\z-\ry*\ry/\z);
\path [name intersections={of = ellipse and horizontal}];

\draw[fill=gray!50] (intersection-1) -- (0,0) -- (intersection-2) -- cycle;
\draw[fill=gray!30] (0,\z) ellipse ({\rx} and {\ry}); 

\end{tikzpicture} 
\end{document}

得到这个

在此处输入图片描述

相关内容