在上面的线程中,创建了一个圆锥体。但是,如果我反转圆锥体,从原点到圆锥边缘的线会穿过圆锥体。这在视觉上并不美观。我怎样才能让线只与圆锥相交而不(\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.5
和z = 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}
得到这个