我发现 METAPOST 是一款创建二维图表和数字的出色的软件。
您能说出几种用于绘制 3D 曲面的 METAPOST 的替代品吗?
我正在寻找的关键功能是能够将所有字体(轴标签和所有数字)都采用 LaTeX 字体,就像 METAPOST 允许我做的那样。
答案1
对于强大的图形我建议渐近线。它具有 C++ 类型的面向对象语法,并且学习起来并不难。一些主要优点如下(但请查看网页上的图库):
- 完整的数学和线性代数引擎
- 完整 3D,包括 PDF 中的活动 3D 图片
- 使用 LaTeX 设置所有文本和数学
- 有可能在 Latex 中内联但通常最好将其用于独立图形。
这是来自 Asymptote 示例库的一个不错的示例加埃坦·马里斯
使用生成它的代码
import graph3;
import contour;
import grid3;
import palette;
size(8cm,IgnoreAspect);
currentprojection=orthographic(-10,-10,8);
limits((0,0,0),(5,10,12));
real f(pair z) {return (z.x+z.y)/(2+cos(z.x)*sin(z.y));}
real[] lignesniveaux={2,4,6,8};
surface s=surface(f,(0,0),(5,10),50,Spline);
draw(s,mean(palette(s.map(zpart),Rainbow())),black);
grid3(new grid3routines [] {XYXgrid, ZXgrid(10), ZYgrid(5)},
Step=2,
step=1,
pGrid=new pen[] {red, blue, black},
pgrid=new pen[] {0.5red, lightgray, lightgray});
xaxis3(Label("$x$",position=MidPoint,align=SE),
Bounds(Min,Min),
OutTicks());
yaxis3(Label("$y$",position=MidPoint,align=SW),
Bounds(Min,Min),
OutTicks(Step=2));
zaxis3(Bounds(Max,Both));
zaxis3(Label("$z$",position=EndPoint,align=N+W),
XYEquals(0,10),
InTicks(beginlabel=false,endlabel=false,Label(align=Y)));
draw(lift(f,contour(f,(0,0),(5,10),lignesniveaux)),1bp+red);
答案2
使用 METAPOST 制作 3D 曲面有什么问题?您可以轻松创建它们这里。单击选项卡并将其设置为“3D 双变量函数曲面”。单击“示例 2”,您应该会看到以下内容
这些是带有轴标签和数字的精美 3D 图形......注意:将鼠标悬停在图片上,您可以旋转到您认为最佳的视图。
答案3
用于绘制 3D 表面的一个很好的 METAPOST 替代品是 PSTricks。
以下代码使用pst-solides3d包,它是众多 PSTricks 包之一。
% Compile this with either xelatex or latex->dvips->ps2pdf
\documentclass{article}
\usepackage{pst-solides3d}
\psset{unit=2}
\usepackage[active,tightpage]{preview}
\PreviewBorder=12pt
\PreviewEnvironment{pspicture}
\begin{document}
\begin{pspicture}[showgrid=false](-3,-2)(3,3)
\psset[pst-solides3d]{viewpoint=20 20 20 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psSolid[object=grille,base=-2 2 -2 2,action=draw,linecolor=red](0,0,0)
\axesIIID(2,2,1.5)(3,2.5,2.5)
\defFunction[algebraic]{sphere}(u,v){2*cos(u)*cos(v)} {2*sin(u)*cos(v)} {2*sin(v)}
\psSolid[object=surfaceparametree,base=pi neg pi 0 0.8,hue=0.2 0.8,function=sphere,linewidth=0.2pt,opacity=0.8,ngrid=0.1]
\end{pspicture}
\end{document}
xelatex
使用或编译代码latex->dvips->ps2pdf
,我们将得到以下输出。
各种各样的
更多带有动画的精彩代码:
% Compile this with either xelatex or latex->dvips->ps2pdf
\documentclass{article}
\usepackage{pst-solides3d}
\psset{unit=2}
\usepackage[active,tightpage]{preview}
\PreviewBorder=12pt
\PreviewEnvironment{pspicture}
\usepackage{multido}
\begin{document}
\multido{\r=0.0+0.4,\i=0+1}{6}{
\begin{pspicture}[showgrid=false](-3,-2)(3,3)
\psset[pst-solides3d]{viewpoint=20 20 20 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psSolid[object=grille,base=-2 2 -2 2,action=draw,linecolor=red](0,0,0)
\axesIIID(2,2,1.5)(3,2.5,2.5)
\ifnum\i=0\relax\else
\defFunction[algebraic]{sphere}(u,v){2*cos(u)*cos(v)} {2*sin(u)*cos(v)} {2*sin(v)}
\psSolid[object=surfaceparametree,base=pi neg pi 0 \r,hue=0.2 0.8,function=sphere,linewidth=0.2pt,opacity=0.8,ngrid=0.1]
\fi
\end{pspicture}}
\end{document}
输出为:
(我希望 101.54 KB 没关系)
答案4
Anthony Phan 编写了 Metapost 的 3d 扩展,三维模型,它扩展了 Metapost,使其具有表达表面的基元、3d 仿射变换(允许您表达表面上的路径)和使用光源的表面渲染。我在我的回答如何绘制圆环。我认为自 2006 年以来该代码就没有人再使用过了。
丹尼斯·里格尔一个相当常用的 Metapost 库,提供 3D 概念。