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

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

我需要用 h 和 r 制作一个非常简单的圆锥体(如我上传的图片所示),但我在之前的问题中找不到它。

简单圆锥体

答案1

arc

 \documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{calc}
\begin{document}
  \begin{tikzpicture}
    \draw[dashed] (0,0) arc (170:10:2cm and 0.4cm)coordinate[pos=0] (a);
    \draw (0,0) arc (-170:-10:2cm and 0.4cm)coordinate (b);
    \draw[densely dashed] ([yshift=4cm]$(a)!0.5!(b)$) -- node[right,font=\footnotesize] {$h$}coordinate[pos=0.95] (aa)($(a)!0.5!(b)$)
                            -- node[above,font=\footnotesize] {$r$}coordinate[pos=0.1] (bb) (b);
    \draw (aa) -| (bb);
    \draw (a) -- ([yshift=4cm]$(a)!0.5!(b)$) -- (b);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

ellipse

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{calc}
\begin{document}
  \begin{tikzpicture}
    \begin{scope}
     \clip (-2,0) rectangle (2,1cm);
    \draw[dashed] (0,0) circle(2cm and 0.35cm);
    \end{scope}
    \begin{scope}
     \clip (-2,0) rectangle (2,-1cm);
    \draw (0,0) circle(2cm and 0.35cm);
    \end{scope}
    \draw[densely dashed] (0,4) -- node[right,font=\footnotesize] {$h$}coordinate[pos=0.95] (aa)(0,0)
                            -- node[above,font=\footnotesize] {$r$}coordinate[pos=0.1] (bb) (2,0);
    \draw (aa) -| (bb);
    \draw (-2,0) -- (0,4) -- (2,0);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

贡萨洛 (Gonzalo) 非常慷慨地提供了圆柱体的阴影,我正在重现他的代码(表示感谢):

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shadings}

\begin{document}

\begin{tikzpicture}
\fill[
  top color=gray!50,
  bottom color=gray!10,
  shading=axis,
  opacity=0.25
  ] 
  (0,0) circle (2cm and 0.5cm);
\fill[
  left color=gray!50!black,
  right color=gray!50!black,
  middle color=gray!50,
  shading=axis,
  opacity=0.25
  ] 
  (2,0) -- (0,6) -- (-2,0) arc (180:360:2cm and 0.5cm);
\draw 
  (-2,0) arc (180:360:2cm and 0.5cm) -- (0,6) -- cycle;
\draw[dashed]
  (-2,0) arc (180:0:2cm and 0.5cm);
\draw[dashed]
  (2,0) -- node[below] {$r$} (0,0) -- node[left] {h} (0,6) ;
\draw 
  (0,8pt) -- ++(8pt,0) -- (8pt,0);   
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

这需要数学家。您需要计算切点,然后将圆锥的顶点连接到这些点,而不是长轴的两端。如果椭圆的长轴从 到(-a,0)(a,0)短轴从(0,-b)(b,0),顶点在(0,h)( h>b),则一个切点为(a*sqrt(1-(b/h)^2), b*(b/h)),另一个切点相同,但 x 坐标为负数。

以下是正确绘制圆锥体的 MetaPost 代码:

beginfig(1)
a:=2in; b:=.5in; h:= 3in; % for example
draw fullcircle xscaled 2a yscaled 2b; % a x b ellipse
pair Z[];
Z2 := (0,h); % vertex
Z1 := (a*sqrt(1 - (b/h)*(b/h)),b*(b/h)); % right tangency
Z3 := (-xpart Z1, ypart Z1); % left tangency
draw Z1--Z2--Z3;
endfig;
end

我不使用 TikZ,所以如果需要的话我会让其他人提供翻译。(并提供虚线部分。)

答案3

Dan 的解决方案翻译为TikZ

\documentclass[tikz,border=2mm]{standalone} 
\usetikzlibrary{positioning, calc}

\begin{document}

\begin{tikzpicture}

\newcommand{\radiusx}{2}
\newcommand{\radiusy}{.5}
\newcommand{\height}{6}

\coordinate (a) at (-{\radiusx*sqrt(1-(\radiusy/\height)*(\radiusy/\height))},{\radiusy*(\radiusy/\height)});

\coordinate (b) at ({\radiusx*sqrt(1-(\radiusy/\height)*(\radiusy/\height))},{\radiusy*(\radiusy/\height)});

\draw[fill=gray!30] (a)--(0,\height)--(b)--cycle;

\fill[gray!50] circle (\radiusx{} and \radiusy);

\begin{scope}
\clip ([xshift=-2mm]a) rectangle ($(b)+(1mm,-2*\radiusy)$);
\draw circle (\radiusx{} and \radiusy);
\end{scope}

\begin{scope}
\clip ([xshift=-2mm]a) rectangle ($(b)+(1mm,2*\radiusy)$);
\draw[dashed] circle (\radiusx{} and \radiusy);
\end{scope}

\draw[dashed] (0,\height)|-(\radiusx,0) node[right, pos=.25]{$h$} node[above,pos=.75]{$r$};

\draw (0,.15)-|(.15,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案4

我来这里是为了寻找一种方法来绘制光锥在 TikZ 中,所以这是我使用 Dan 的答案制作的:

\documentclass[tikz]{standalone}

\begin{document}

\begin{tikzpicture}
  \def\b{0.2} % semi-minor axis
  \pgfmathsetmacro{\h}{(1 + sqrt(1 + 4*\b^2)) / 2}
  \pgfmathsetmacro{\a}{sqrt(\h)}
  \draw (-1, -1) -- (1,  1);
  \draw (-1,  1) -- (1, -1);
  \draw (0,  \h) ellipse [x radius = \a, y radius = \b];
  \draw (0, -\h) ellipse [x radius = \a, y radius = \b];
\end{tikzpicture}

\end{document}

相关内容