如何绘制这个圆锥体?

如何绘制这个圆锥体?

设是金字塔DABC,其中D(0,0,0)A(0,0,3)和。B(3,0,0)C(0, 3,0)正在尝试绘制此代码在此处输入图片描述

我无法画出圆锥体。我试过了

 \documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
    \tdplotsetmaincoords{60}{100}
\begin{tikzpicture} [tdplot_main_coords,c/.style={circle,fill,inner sep=1pt}]
\path
(0,0,0) coordinate (D)
(3,0,0)  coordinate (B)
(0, 3,0) coordinate (C)
(0,0,3) coordinate (A)
;
\draw (C) -- (A) -- (B) -- cycle;
\draw[dashed] (D) -- (C) (D) --(A) (D) -- (B);
\path foreach \p/\g in {A/180,B/0,C/90,D/-90}{(\p)node[c]{}+(\g:2.5mm) node{$\p$}};
\end{tikzpicture}
\end{document}  

在此处输入图片描述

如何绘制圆锥体?

答案1

你可以3d工具. 可以通过 找到一些计算结果3dtools

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3dtools,calc}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=70,theta=80},line cap=butt,
line join=round,c/.style={circle,fill,inner sep=1pt},declare function={a=4;}] 
\path
(0,0,0) coordinate (D)
(a,0,0)  coordinate (B)
(0, a,0) coordinate (C)
(0,0,a) coordinate (A);
\path[3d/circumcircle center={A={(A)},B={(B)},C={(C)}}] coordinate (J);
;
\draw[3d/hidden] (D) --(A)  (D) -- (J)  (D) --(C);
\draw[3d/visible] (A) --(B)--(C) --cycle (D) -- (B);
\pgfmathsetmacro{\R}{tddistance("(J)","(B)")}
\pgfmathsetmacro{\h}{tddistance("(J)","(D)")}
\tikzset{3d/define orthonormal dreibein={A={(A)},B={(C)},C={(B)}}}
\path[x={(ex)},y={(ey)},z={(ez)}]
(J) pic{3d/cone={r=\R,h=\h}};
\path foreach \p/\g in {A/90,D/-90,B/-30,C/0,J/-90}{(\p)node[c]{}+(\g:2.5mm) node{$\p$}};
\end{tikzpicture}
\end{document}  

在此处输入图片描述

phi=5

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{3dtools,calc}% https://github.com/marmotghost/tikz-3dtools
\begin{document}
\begin{tikzpicture}[3d/install view={phi=5,theta=80},line cap=butt,
line join=round,c/.style={circle,fill,inner sep=1pt},declare function={a=4;}] 
\path
(0,0,0) coordinate (D)
(a,0,0)  coordinate (B)
(0, a,0) coordinate (C)
(0,0,a) coordinate (A);
\path[3d/circumcircle center={A={(A)},B={(B)},C={(C)}}] coordinate (J);
;
\draw[3d/hidden]   (D) -- (J)  (D)  --(C) (A) -- (B) -- (C) --cycle ;
\draw[3d/visible] (D) --(A) (D) -- (B);
\pgfmathsetmacro{\R}{tddistance("(J)","(B)")}
\pgfmathsetmacro{\h}{tddistance("(J)","(D)")}
\tikzset{3d/define orthonormal dreibein={A={(A)},B={(C)},C={(B)}}}
\path[x={(ex)},y={(ey)},z={(ez)}]
(J) pic{3d/cone={r=\R,h=\h}};
\path foreach \p/\g in {A/90,D/-90,B/-30,C/50,J/-90}{(\p)node[c]{}+(\g:2.5mm) node{$\p$}};
\end{tikzpicture}
\end{document}  

在此处输入图片描述

答案2

尝试一下渐近线

编译于http://asymptote.ualberta.ca/

import solids;
size(10cm,0);
currentprojection=orthographic(1,-0.4,0.2);

triple A=(0,0,3),B=(3,0,0),C=(0,3,0),D=(0,0,0);

revolution CoRev=cone((A+B+C)/3,abs((A+B+C)/3-A),abs((A+B+C)/3-D),axis=D-(A+B+C)/3,n=1);

//draw(surface(CoRev),lightred+opacity(.2));
draw(CoRev,blue+1bp);

draw(A--B--C--cycle^^B--D);
draw(A--D^^C--D,dashed);
dot("$A$",A,dir(90),linewidth(5bp));
dot("$B$",B,dir(-45),linewidth(5bp));
dot("$C$",C,dir(0),linewidth(5bp));
dot("$D$",D,dir(180),linewidth(5bp));
dot("$I$",(A+B+C)/3,dir(-30),linewidth(5bp));

在此处输入图片描述

答案3

通过简单的计算,我们很容易知道金字塔的底座由一个边长的等边三角形组成3*\sqrt{2},金字塔的高度为2*\sqrt{3},圆锥半径为\sqrt{6}

现在我们有了尺寸,我的方法(希望不是太难)是“像往常一样”在水平面上画出金字塔的底部和圆锥体。通过一些数学计算,我们可以得到类似这样的结果(我知道可见性是错误的): 在此处输入图片描述

所以现在我们旋转图形直到得到您需要的近似视图。

完整的代码如下:

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

% isometric axes
\pgfmathsetmacro\xx{1/sqrt(2)}
\pgfmathsetmacro\xy{1/sqrt(6)}
\pgfmathsetmacro\zz{sqrt(2/3)}
\tikzset{isometric/.style={
  rotate=110, % <-- commenting this we have the 'usual' view
  x={(-\xx cm,-\xy cm)},y={(\xx cm,-\xy cm)},z={(0cm,\zz cm)}}
}

% dimensions and some maths
\def\r{135}                                                % rotation angle (around z)
\pgfmathsetmacro\ch{2*sqrt(3)}                             % cone height
\pgfmathsetmacro\cr{sqrt(6)}                               % cone radius
\pgfmathsetmacro\gs{sqrt((2*\ch*\ch-\cr*\cr)/(3*\cr*\cr))} % generatrix slope
\pgfmathsetmacro\xt{sqrt(6)*\gs*\ch/(1+3*\gs*\gs)}         % tangent point x
\pgfmathsetmacro\yt{\gs*\xt}                               % tangent point y
\pgfmathsetmacro\aa{(\ch*\zz-\yt)/\xy/2-\xt/\xx/2}         % coordinate x in xy plane
\pgfmathsetmacro\bb{(\ch*\zz-\yt)/\xy/2+\xt/\xx/2}         % coordinate y in xy plane
\pgfmathsetmacro\at{atan(\bb/\aa)+180}                     % angle to the tangent point

\begin{document}
\begin{tikzpicture}[isometric]
  % coordinates
  \coordinate (V) at (0,0,{2*sqrt(3)});
  \foreach\i in {1,2,3}
    \coordinate (A\i) at (120*\i-120+\r:\cr);
  \coordinate (T1) at (180+\at:\cr); % tangent point
  \coordinate (T2) at (270-\at:\cr); % tangent point
  % pyramid 
  \draw (A1) -- (A2) -- (A3) -- cycle;
  \draw[dashed] (A1) -- (V) -- (A3);
  \draw (V) -- (A2);
  % cone
  \draw[thick,red] (0,0) circle (\cr);
  \draw[thick,red] (T1) -- (V) -- (T2);
  % labels
  \node at (A1) [above] {$A$};
  \node at (A2) [below] {$B$};
  \node at (A3) [right] {$C$};
  \node at (V)  [left]  {$D$};
  \fill (0,0,0) circle (1pt) node [right] {$I$};
\end{tikzpicture}
\end{document}

最终旋转后的图形: 在此处输入图片描述

答案4

我看到那确实是一个圆锥体^^,并且喜欢通过重心坐标确定外心的方式。

在此处输入图片描述

triple barycentric(triple A, triple B, triple C, real a, real b, real c){
return (a*A+b*B+c*C)/(a+b+c);
}
triple circumcenter(triple A, triple B, triple C){
real a=abs(B-C), b=abs(C-A), c=abs(A-B);
return barycentric(A,B,C,a^2*(b^2+c^2-a^2), b^2*(c^2+a^2-b^2),c^2*(a^2+b^2-c^2));
}
real circumradius(triple A, triple B, triple C){
return abs(A-circumcenter(A,B,C));
}

unitsize(1cm);
import three;
import solids;
//currentprojection=orthographic(dir(70,25),center=true,zoom=.95);
triple D=(0,0,0), B=(3,0,0), C=(0,3,0), A=(0,0,3);
triple O=circumcenter(A,B,C); dot(O,red);
real R=circumradius(A,B,C);
triple nABC=normal(A--C--B);
draw(A--B--C--D--cycle^^A--C^^B--D);
draw(circle(O,R,nABC),red);
real h=abs(D-O);
revolution coneDABC=cone(O,R,h,nABC);
draw(surface(coneDABC),yellow+opacity(.5));

(这会出现对于任何四面体的情况的一般问题,例如D=(0,-3,0)。则revolution不能使用。)

相关内容