因此,我最近开始练习使用 TikZ 绘制(可定向)曲面,结果我的第一个图形如下所示:
我对此感到非常自豪,尽管可能并不多。然而,几周前我偶然发现了一些插图,尤其是这幅
(图片说明中已添加来源)
我真的很想知道这是否(可能)是在 TikZ 或 LaTeX 中完成的,以及你们能否给我一些关于如何自己学习创建此类图形的提示。我知道 TikZ-Manual 是一个很好的开始,但我感觉有点迷茫,尽管我花了近几十个小时学习如何在 TikZ 中绘制曲线,但老实说,我只能通过偶然的机会完成我的第一个图形。
把它们加起来:哪里可以让我更好地学习如何绘制这样的图形,或者什么可以帮助我开始学习这一点?例如:有很多不同的方法来绘制曲线。如果我想重新创建第二个图形,哪种方法对我最有帮助?我也非常好奇如何在表面上画出垂直线。
非常感谢您的任何建议。
非常感谢!
附言:我绝不是在寻找某人来重现图中的人物。我主要想学习一些技巧,以便将来自己重现这些事物。
答案1
好的,我们开始吧。当然,还有相当大的改进空间。为什么它看起来像假 3D?因为它是假 3D。你最好使用渐近线,或者如果你找到一个有技能和耐心的人愿意帮助你。;-)
\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{calc,intersections,fadings} %
\usetikzlibrary{shadows.blur}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{75}{70}
\begin{tikzpicture}[tdplot_main_coords,scale=3.14]
% restore these if you want to see where the axes point
% \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
% \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
% \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
\begin{scope}[xshift=2mm,rotate=10]
\tikzfading[name=fade right,
left color=transparent!60,
right color=transparent!00] ;
\fill[gray!80, blur shadow={shadow blur
steps=10,shadow xshift=0pt,shadow yshift=0pt,shadow scale=1.15}] plot[variable=\x,samples=180,domain=-90:270]
({1.2*cos(\x)},{sin(\x)},{1});
\filldraw[white,path fading=fade right,overlay] (-1.5,-1.3,1) -- (1.5,-1.3,1) --
(1.5,1.3,1) -- (-1.5,1.3,1) -- cycle;
\end{scope}
\draw[name path=back] plot[variable=\x,samples=180,domain=90:270]
({1.2*cos(\x)},{sin(\x)},{1.6-0.4*cos(2*\x)});
\draw[name path=front] plot[variable=\x,samples=180,domain=-90:90]
({1.2*cos(\x)},{sin(\x)},{1.6-0.4*cos(2*\x)});
\coordinate (front1) at ({1.2*cos(-45)},{sin(-45)},{1.6-0.4*cos(-2*45)});
\coordinate (front2) at ({1.2*cos(45)},{sin(45)},{1.6-0.4*cos(2*45)});
\coordinate (front3) at ({1.2*cos(0)},{sin(0)},{1.6-0.4*cos(2*0)});
\draw[name path=top,opacity=0.3] plot[variable=\x,samples=180,domain=-90:90]
(0,{sin(\x)},{1.8-0.2*cos(2*\x)});
\coordinate (top1) at (0,{sin(0)},{1.8-0.2*cos(2*0)});
\path[name intersections={of=top and back, by={tb}}];
\draw[name path=top front,opacity=0.3] (front1) to[out=-10,in=-150] (front2);
\draw[name path=top front,opacity=0.3] (front3) to[out=100,in=-20] (top1)
to[out=160,in=20] (tb);
%
\fill[blue,opacity=0.2] plot[variable=\x,samples=180,domain=-90:90]
(0,{sin(\x)},{1.8-0.2*cos(2*\x)}) --
plot[variable=\x,samples=180,domain=90:-90]
({1.2*cos(\x)},{sin(\x)},{1.6-0.4*cos(2*\x)});
\fill[blue,opacity=0.2] plot[variable=\x,samples=180,domain=-90:90]
(0,{sin(\x)},{1.8-0.2*cos(2*\x)}) --
plot[variable=\x,samples=180,domain=90:270]
({1.2*cos(\x)},{sin(\x)},{1.6-0.4*cos(2*\x)});
\end{tikzpicture}
\end{document}
编辑:添加网格线并使阴影变得模糊。