裁剪 Asymptote 3D 图像

裁剪 Asymptote 3D 图像

我正在使用 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);

结果:

在此处输入图片描述

相关内容