如何在 LaTeX 中绘制表面图片

如何在 LaTeX 中绘制表面图片

因此,我最近开始练习使用 TikZ 绘制(可定向)曲面,结果我的第一个图形如下所示:

在此处输入图片描述

我对此感到非常自豪,尽管可能并不多。然而,几周前我偶然发现了一些插图,尤其是这幅

来源:http://brickisland.net/cs177/?p=144

(图片说明中已添加来源)

我真的很想知道这是否(可能)是在 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}

编辑:添加网格线并使阴影变得模糊。

相关内容