在渐近线中绘制挤压曲面的边缘

在渐近线中绘制挤压曲面的边缘

考虑下面给出的 MWE:

import graph3;
path3 bottom = (0,0,0) -- (1,0,0) -- (1,1,0) -- (0,1,0) -- cycle;
draw(extrude(bottom, 5*Z), white);

这将生成一个具有表面的实体(见下面的第一张图)。有没有办法自动用线标记生成的表面的边缘(见下面的第二张图)?

我可以使用常规绘图绘制底部和顶部表面线,但我想知道是否可以自动绘制挤压表面的边缘。

在此处输入图片描述

答案1

extrude我看到了命令的语法three_surface.asy。从数学上讲,使用 3D 路径pq,该命令会沿着轨道extrude推动曲线。pq

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 形状时非常有用:倾斜的立方体、金字塔或沿微分方程轨道的管道……

相关内容