使用 tikz 绘制后半球

使用 tikz 绘制后半球

我找到了相关的问题,但没有一个是我想要的。

tikz可以绘制一个阴影球体,如下所示

\documentclass[crop,tikz]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d}

\begin{document}
\tdplotsetmaincoords{110}{-30}
\begin{tikzpicture}[tdplot_main_coords]

\pgfmathsetmacro{\myradius}{3}

\path[tdplot_screen_coords] (0,0) circle (\myradius);    
\shade[tdplot_screen_coords,ball color=gray!50,opacity=1] (0,0) circle (\myradius);

\end{tikzpicture}
\end{document}

结果如下:

领域

我怎样才能修改上述代码,也许用合适的clip,以便只显示球体的后半部分?

答案1

\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\shade[ball color=gray!50] (0,0) circle[radius=2 cm] node {Front half};
\shade[ball color=gray!50, shading angle=180] (5,0) circle[radius=2 cm] node {Back half};
\end{tikzpicture}
\end{document}

两个带文字的阴影球

答案2

另一个 TiZ 3d 解决方案,略有不同。

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{3d}          % 'canvas is...' options
\usetikzlibrary{perspective} % isometric view

\begin{document}
\begin{tikzpicture}[isometric view]
% top half
\draw[ball color=gray!50] {[canvas is xy plane at z=0] (135:2) arc (135:315:2)} arc (0:180:2cm);
% bottom half
\begin{scope}[yshift=-3cm]
\draw[ball color=gray!70,shading angle=180] (0,0) circle (2);
\draw[ball color=gray!50] {[canvas is xy plane at z=0] (315:2) arc (315:135:2)} arc (180:360:2cm);
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑:使用剪辑实现更好的灯光效果(但需要更多代码):

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{3d}          % 'canvas is...' options
\usetikzlibrary{perspective} % isometric view

\newcommand\contour
{%
  {[canvas is xy plane at z=0] (135:2) arc (135:315:2)} arc (0:180:2cm)
}
\newcommand\half
{%
  \begin{scope}
    \clip \contour;
    \fill[ball color=gray!50] (0,0,0) circle (2cm);
  \end{scope}
  \draw \contour;
}

\begin{document}
\begin{tikzpicture}[isometric view]
% top half
\begin{scope}
  \half
\end{scope}
% bottom half
\begin{scope}[yshift=-3cm,rotate=180]
  \half
  \draw[ball color=gray!70,shading angle=180] (0,0) circle (2);
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

一个可能的、简单的解决方案是arc

\documentclass[border=1cm]{standalone}

\usepackage{tikz}

\begin{document}
    
    \begin{tikzpicture}
    
    \shade[ball color=gray!50,opacity=1] (0,0) arc (0:-180:1cm and 4mm) arc (180:0:1cm and 1cm);
    
    \end{tikzpicture}
    
    \end{document}

在此处输入图片描述

编辑:因为 OP 澄清了他想要什么,我只想添加一个正确的解决方案:

\documentclass[border=1cm]{standalone}

\usepackage{tikz}

\begin{document}
    
    \begin{tikzpicture}
       
    \shadedraw [ball color=gray!50,shading=ball,opacity=1] (0,-1) arc (-90:90:1cm and 10mm);
  
    \shadedraw [ball color=gray!50,shading=ball,opacity=1] (0,0) ellipse (0.5cm and 1cm);
     
    \end{tikzpicture}
    
    \end{document}

在此处输入图片描述

答案4

如果你对 Asymptote 感兴趣,可以unithemisphere从 3D 模块获取three。只需将以下代码粘贴到http://asymptote.ualberta.ca/并单击运行。请注意,两个代码都使用相同的投影(相同的视角)。您可能需要更改opacity(.5)以查看隐藏的内容。

前半球是球体部分,其特征是x > 0

在此处输入图片描述

import three;
size(6cm);
currentprojection=orthographic((1,1,.6),zoom=.9);
draw(Label("$x$",EndPoint),O--2X,red);
draw(Label("$y$",EndPoint),O--2Y,green);
draw(Label("$z$",EndPoint),O--2Z,blue);

// the front half x>0
draw(rotate(90,Y)*unithemisphere,yellow+opacity(1));

后半球是球体部分x < 0

在此处输入图片描述

import three;
size(6cm);
currentprojection=orthographic((1,1,.6),zoom=.9);
draw(Label("$x$",EndPoint),O--2X,red);
draw(Label("$y$",EndPoint),O--2Y,green);
draw(Label("$z$",EndPoint),O--2Z,blue);

// the back half x<0
draw(rotate(-90,Y)*unithemisphere,yellow+opacity(1));

相关内容