答案1
extrude
我看到了命令的语法three_surface.asy
。从数学上讲,使用 3D 路径p
和q
,该命令会沿着轨道extrude
推动曲线。p
q
surface extrude(path3 p, path3 q)
{
static patch[] allocate;
return surface(...sequence(new patch(int i) {
return patch(subpath(p,i,i+1)--subpath(q,i+1,i)--cycle);
},length(p)));
}
surface extrude(path3 p, triple axis=Z)
{
return extrude(p,shift(axis)*p);
}
surface extrude(path p, triple plane(pair)=XYplane, triple axis=Z)
{
return extrude(path3(p,plane),axis);
}
surface extrude(explicit path[] p, triple axis=Z)
{
surface s;
for(path g:p)
s.append(extrude(g,axis));
return s;
}
我们不应该期望挤压表面的边缘能够自动绘制,因为命令中没有实现任何边缘extrude(path3 p, path3 q)
。例如,如果q
是一个圆,那么根本没有边缘。
// nice to rotate it on http://asymptote.ualberta.ca/
unitsize(1cm);
import graph3;
//path3 bottom = (0,0,0) -- (1,0,0) -- (1,1,0) -- (0,1,0) -- cycle;
path3 bottom=circle(O, 1, normal=Z);
draw(extrude(bottom, 2*Z+2*Y), yellow);
draw(extrude(bottom, -2*Z+2*Y), orange);
我相信该extrude
命令在制作科学的 3D 形状时非常有用:倾斜的立方体、金字塔或沿微分方程轨道的管道……