谢邀!
这种不是特别复杂的图可以在LaTeX中使用TikZ绘制。上面两个图是一个类型的,都是一个曲线图中有一条曲线与切线;下面的图是另一种类型,虽然是立体图形,但可以通过绘制基本元素——椭圆和线段来完成。
先来看第一个图形,为了方便绘制,最外侧的封闭曲线可以用椭圆来代替,绿色的曲线可以用
path[deepgreen](a)edge[bend left](b);
来完成。另外绘制“近似”的切线就非常简单了。代码如下:
documentclass[border=0.3cm]{standalone} usepackage{amsmath} usepackage{tikz} usepackage{xcolor} definecolor{deepgreen}{cmyk}{0.99998,0,1,0} egin{document} egin{tikzpicture} draw[rotate=40](0,0)ellipse(2 and 1.2); path[deepgreen] (-1, -1) edge [bend left] (1.2,0.6);
ode at(1.2,0.6)[right]{scriptsize( lambda )}; fill(-0.2,0.07)circle(1pt)node[below]{scriptsize( p )}; draw[-latex,thick](-0.2,0.07)--(0.7,0.8)node[left,xshift=-0.1cm]{scriptsize( X )};
ode at(0,-1)[right]{scriptsize( M )}; end{tikzpicture} end{document}
编译效果如下:
题主说希望用一般一点的封闭曲线表示这个流形,那在这里我提供另一种普遍使用的方法:
首先在下面的网站中绘制一个封闭曲线,注意这里我们使用的是Bézier曲线的命令,四个控制点的Bézier可以模拟出大多数形状的封闭曲线。网站如下:
下面是网站的截图:
绘制好大致形状之后可以直接导出LaTeX的TikZ绘图代码,内容如下:
ikzset{every picture/.style={line width=0.75pt}} %set default line width to 0.75pt egin{tikzpicture}[x=0.75pt,y=0.75pt,yscale=-1,xscale=1] draw (120.33,71.5) .. controls (159.33,69.5) and (180.33,82.5) .. (183.33,124.5) .. controls (186.33,166.5) and (174.33,199.5) .. (137.33,242.5) .. controls (100.33,285.5) and (13.33,257.5) .. (34.33,195.5) .. controls (55.33,133.5) and (81.33,73.5) .. (120.33,71.5) -- cycle ; end{tikzpicture}
然后我们将tikzpicture中的代码放在一个scope(子图)环境中,并通过 xscale, yscale, xshift, yshift 等命令调节这个scope的大小与位置,使其能够与其他元素位置吻合。我调整完后完整代码如下:
documentclass[border=0.3cm]{standalone} usepackage{amsmath} usepackage{tikz} usepackage{xcolor} definecolor{deepgreen}{cmyk}{0.99998,0,1,0} ikzset{every picture/.style={line width=0.75pt}} egin{document} egin{tikzpicture} egin{scope}[x=0.75pt,y=0.75pt,yscale=-0.8,xscale=0.8,xshift=-1cm,yshift=-5cm,rotate=20] draw (119,71.5) .. controls (158,69.5) and (179,82.5) .. (182,124.5) .. controls (185,166.5) and (173,199.5) .. (136,242.5) .. controls (99,285.5) and (12,257.5) .. (33,195.5) .. controls (54,133.5) and (80,73.5) .. (119,71.5) -- cycle ; end{scope} %draw[rotate=40](0,0)ellipse(2 and 1.2); path[deepgreen] (-1, -1) edge [bend left] (1.2,0.6);
ode at(1.2,0.6)[right]{scriptsize( lambda )}; fill(-0.2,0.07)circle(1pt)node[below]{scriptsize( p )}; draw[-latex,thick](-0.2,0.07)--(0.7,0.8)node[left,xshift=-0.1cm]{scriptsize( X )};
ode at(0,-1)[right]{scriptsize( M )}; end{tikzpicture} end{document}
编译效果如下图:
这样就没有使用椭圆表示啦!
第二个图其实同理,不过最外封闭曲线可以通过
draw[smooth cycle] plot coordinates{(a)(b)...(x)};
来绘制由多个点控制的光滑封闭曲线,其余的内容和第一个图同理。
第三个图中的基本元素就只有椭圆弧和线段,绘制完整的椭圆可以通过命令:
draw (a,b) ellipse (xcm and ycm);
其中(a,b)表示椭圆的中心坐标,x和y分别表示椭圆的长轴和短轴长度;如果绘制椭圆弧的话,可以用命令:
draw (a,b) arc (m:n: xcm and ycm);
注意这里的(a,b)表示椭圆弧的起点坐标,m,n表示椭圆弧中参数的取值范围,x,y同样表示椭圆的长轴和短轴。绘制第三个图的代码如下:
documentclass[border=0.5cm]{standalone} usepackage{pgfplots} usetikzlibrary{arrows} egin{document} egin{tikzpicture}[thick] draw (-2.87,3.94) ellipse (2.8cm and 0.88cm); draw (-5.52,-1.92) arc (164:376: 2.8cm and 0.88cm); draw [dashed] (-0.14,-1.92) arc (16:164: 2.8cm and 0.88cm); draw (-5.55,3.68)-- (-0.14,-1.92); draw (-5.52,-1.92)-- (-0.19,3.69); draw[blue,-stealth](-2.85,0.9)--(-1,2.84)node[black,right]{null}; draw[blue,-stealth](-2.85,0.9)--(-0.8,0)node[above right,black]{spacelike}; draw[blue,-stealth](-2.85,0.9)--(-4,3)node[right,yshift=-0.1cm,black]{timelike}; end{tikzpicture} end{document}
编译效果如下图:
总之,TikZ这种工具,需要多看手册,多尝试,多练习,熟能生巧,才能画出好看的图片。