METAPOST 的一个很好的替代品,用于绘制三维表面

METAPOST 的一个很好的替代品,用于绘制三维表面

我发现 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 概念

相关内容