我找到了相关的问题,但没有一个是我想要的。
我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
答案2
另一个 Ti钾Z 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));