我正在使用 Asymptote 生成嵌入 .pdf 的 3D 图像。有没有办法剪辑这些 3D 图像,就像您可以将 2D 图像剪辑到路径一样?我很乐意剪辑到矩形实体的内部。
我之所以问这个问题,是因为使用Spline
某些函数绘制图形会产生一些波浪形的、不理想的末端行为。下面我给出了一个单叶双曲面的例子。使用样条函数时,顶部会出现一个颤动。我曾尝试用条件将其切断bool
,但结果非常不理想。
这是一个例子;请注意,您可以注释掉一些行来查看不同的结果。
import graph3;
size(200,200,IgnoreAspect); currentprojection=orthographic(4,4,0);
defaultrender.merge=true;
defaultpen(0.5mm);
//Draw the surface z^2 - x^2 - y^2=1
triple f(pair t) {return (cos(t.y)*tan(t.x), sin(t.y)*tan(t.x),1/cos(t.x));
}
bool cond(pair t) {return 1/cos(t.x) <1.5;}
//The following plots with just Spline. Note the warble.
surface s=surface(f,(-1,0),(1,2*pi),32,16,Spline);
// Comment above and uncomment below to use the boolean cond.
//surface s=surface(f,(-1,0),(1,2*pi),32,16,Spline,cond);
pen p=rgb(0,0,.7);
draw(s,rgb(.6,.6,1)+opacity(.7),meshpen=p);
我可以删除该Spline
选项但我喜欢它如何使事情变得顺利。
以下是颤音:
如果你尝试使用以下选项来切断它,就会发生以下情况bool
:
答案1
这并不能回答你的问题,但它确实解决了你的问题。在这种情况下,你可以通过告诉样条插值器相z
对于t.x
(即u
参数)单调增加来消除波动。你可以通过使用样条类型参数来实现这一点:
surface s=surface(f,(-1,0),(1,2*pi),32,16,
usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
vsplinetype=Spline);
完整代码:
settings.outformat="png";
settings.render=4;
import graph3;
size(400,400,IgnoreAspect); currentprojection=orthographic(4,4.1,2);
defaultrender.merge=true;
defaultpen(0.5mm);
//Draw the surface z^2 - x^2 - y^2=1
triple f(pair t) {return (cos(t.y)*tan(t.x), sin(t.y)*tan(t.x),1/cos(t.x));
}
surface s=surface(f,(-1,0),(1,2*pi),32,16,
usplinetype=new splinetype[] {notaknot,notaknot,monotonic},
vsplinetype=Spline);
pen p=rgb(0,0,.7);
draw(s,rgb(.6,.6,1)+opacity(.7),meshpen=p);
结果: