在球体内画一个圆顶

在球体内画一个圆顶

我仍在尝试掌握 tikz。我正尝试在球体内为圆顶遮阳。代码

\begin{tikzpicture}[font = \sansmath]
  \coordinate (O) at (0,0);



  % ball background color
  \shade[ball color = blue, opacity = 0.1] (0,0) circle [radius = 2cm];

  % cone
  \begin{scope}
    \def\rx{0.71}% horizontal radius of the ellipse
    \def\ry{0.15}% vertical radius of the ellipse
    \def\z{0.725}% 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}];


  \end{scope}


  % ball
  \draw (O) circle [radius=2cm];
  % label of ball center point
  \filldraw (O) circle (1pt) node[below] {$O$};

  % radius
  \draw[densely dashed] (O) to [edge label = $1$] (-1.33,1.33) coordinate (x);
  \draw[densely dashed] (O) -- (1.33,1.33) coordinate (y);

  % cut of ball surface
  \draw[red, densely dashed] (-1.36,1.46) arc [start angle = 170, end angle = 10,
    x radius = 13.8mm, y radius = 3.6mm];
  \draw[red] (-1.29,1.52) arc [start angle=-200, end angle = 20,
    x radius = 13.75mm, y radius = 3.15mm];

  % label of cut of ball surface
  \draw (-1.2,2.2) -- (-0.23,1.1) node at (-1.37,2.37) {$B$};

  %angle
  \pic[draw,->,angle radius=.5cm,angle eccentricity=1.3,"$\alpha$"][blue] {angle=y--O--x};

\end{tikzpicture}

为我提供了我正在工作的领域,我希望拥有它:

在此处输入图片描述 我试过摆弄阴影,但没有成功。

答案1

像这样?

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{sansmath}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,backgrounds,quotes,angles,calc,patterns}
\begin{document}
\tdplotsetmaincoords{80}{00}
\begin{tikzpicture}[tdplot_main_coords,font=\sansmath]
 \pgfmathsetmacro{\R}{2} % radius
 \pgfmathsetmacro{\myang}{50} % latitude angle of the red circle
 \coordinate (O) at (0,0,0);
 \shade[ball color = blue, opacity = 0.2,tdplot_screen_coords] 
 (O) circle [radius = \R*1cm];
 \begin{scope}[canvas is xy plane at z={\R*sin(\myang)},transform shape]
  % \angVis from https://tex.stackexchange.com/a/49589/121799
  \pgfmathsetmacro\angVis{atan(sin(\myang)*cos(\tdplotmaintheta)/sin(\tdplotmaintheta))}
  \begin{scope}[on background layer]
   \draw[red,dashed] (\angVis:{\R*cos(\myang)}) arc (\angVis:180-\angVis:{\R*cos(\myang)});
  \end{scope}  
  \draw[red] (180-\angVis:{\R*cos(\myang)}) arc (180-\angVis:360+\angVis:{\R*cos(\myang)});
  \path (0:{\R*cos(\myang)}) coordinate (R) 
  (180:{\R*cos(\myang)}) coordinate (L);
 \end{scope}
 \begin{scope}[on background layer]
  \draw[dashed] (L) -- (O) node[midway,below] {$L$} -- (R);
  \fill (O) circle[radius=1pt] node[below] {$O$};
  \pic[draw,-latex,angle radius=.5cm,angle eccentricity=1.3,"$\alpha$"] 
  {angle=R--O--L};
 \end{scope}
 \path[tdplot_screen_coords,pattern=north east lines,pattern color=green!70!black] 
 let \p1=(L),\p2=(R),\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)}
 in (O) -- (R) arc(\n2:\n1:\R) -- cycle;
\end{tikzpicture}
\end{document}

在此处输入图片描述

当然,您也可以将其添加到您的代码中(我发现这有点复杂,但这只是我的观点)。

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{sansmath}
\usetikzlibrary{quotes,angles,%intersections,%<- not used
calc,patterns}
\begin{document}

\begin{tikzpicture}[font = \sansmath]
  \coordinate (O) at (0,0);



  % ball background color
  \shade[ball color = blue, opacity = 0.1] (0,0) circle [radius = 2cm];

  % cone you are not using this anywhere
%   \begin{scope}
%     \def\rx{0.71}% horizontal radius of the ellipse
%     \def\ry{0.15}% vertical radius of the ellipse
%     \def\z{0.725}% distance from center of ellipse to origin
% 
%     \path [name path global=ellipse]    (0,\z) ellipse ({\rx} and {\ry});
%     \path [name path = horizontal] (-\rx,\z-\ry*\ry/\z)
%                                 -- (\rx,\z-\ry*\ry/\z);
%     
% 
% 
%   \end{scope}


  % ball
  \draw (O) circle [radius=2cm];
  % label of ball center point
  \filldraw (O) circle (1pt) node[below] {$O$};
  % radius
  \draw[densely dashed] (O) to [edge label = $1$] (-1.33,1.33) coordinate (x);
  \path[fill=green!70!black,fill opacity=0.5] 
    (O) -- (45:2) arc(45:135:2cm) -- cycle;
  \draw[densely dashed] (O) -- (1.33,1.33) coordinate (y);

  % cut of ball surface
  \draw[red, densely dashed] (-1.36,1.46) arc [start angle = 170, end angle = 10,
    x radius = 13.8mm, y radius = 3.6mm];
  \draw[red] (-1.29,1.52) arc [start angle=-200, end angle = 20,
    x radius = 13.75mm, y radius = 3.15mm];

  % label of cut of ball surface
  \draw (-1.2,2.2) -- (-0.23,1.1) node at (-1.37,2.37) {$B$};

  %angle
  \pic[draw,->,angle radius=.5cm,angle eccentricity=1.3,"$\alpha$"][blue] {angle=y--O--x};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容