![在球体内画一个圆顶](https://linux22.com/image/393637/%E5%9C%A8%E7%90%83%E4%BD%93%E5%86%85%E7%94%BB%E4%B8%80%E4%B8%AA%E5%9C%86%E9%A1%B6.png)
我仍在尝试掌握 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}