我有一个关于 Asymptote 的问题。当我使用 Asymptote 绘制由循环路径定义的平面时,我遇到了一个问题,如下例所示。当我绘制表面时,在表面角落附近可以看到奇怪的条纹。
settings.outformat="png";
settings.render=8;
size(8cm, 0);
import three;
currentprojection = orthographic(0,0,-1,up=-Y,zoom=0.937);
real r=3;
real c = 5;
real w = 1;
pair Pynp = (-w/2, c/2);
pair P1np = (-w/2, w/2);
pair Pxnp = (-c/2, w/2);
pair Pxnn = (-c/2, -w/2);
pair P1nn = (-w/2, -w/2);
pair Pynn = (-w/2, -c/2);
pair Pcyn = (0, -c/2);
pair Pcyp = (0, c/2);
path outline = arc((0,0), r, 90, 270) -- Pcyn -- Pynn -- P1nn -- Pxnn -- Pxnp -- P1np -- Pynp -- Pcyp -- cycle;
path3 outline3 = path3(outline);
surface s = surface(outline);
draw(outline3, black + linewidth(2));
draw(s, red);
如上例所示,表面由一条循环二维路径定义,该路径由一条圆弧和若干条线段组成。
您能否告诉我这是否是一个已知问题,以及我可以采取什么措施来解决该问题?
我在 Windows 10 平台上使用 Asymptote 2.41。
这是 OpenGL 渲染的屏幕截图。两个角落的黑色条纹清晰可见。这些条纹也出现在我直接从 asy 文件生成的 PNG 文件中。
答案1
我不确定如何解释这个问题。也许在 3D 渲染器、退化三角形或贝塞尔曲面片中?我尝试了命令Arc
(大写 A),graph.asy
它可以更精确地生成圆弧。圆弧的节点数不同,三角剖分outline
(创建曲面所需的)也不同,在 Linux 64 位上使用 Asymptote svn(或多或少),似乎没问题。这里是代码
size(8cm, 0);
import graph;
import three;
currentprojection = orthographic(0,0,-1,up=-Y,zoom=0.937);
real r=3;
real c = 5;
real w = 1;
pair Pynp = (-w/2, c/2);
pair P1np = (-w/2, w/2);
pair Pxnp = (-c/2, w/2);
pair Pxnn = (-c/2, -w/2);
pair P1nn = (-w/2, -w/2);
pair Pynn = (-w/2, -c/2);
pair Pcyn = (0, -c/2);
pair Pcyp = (0, c/2);
path outline = Arc((0,0), r, 90, 270,10) -- Pcyn -- Pynn -- P1nn -- Pxnn -- Pxnp -- P1np -- Pynp -- Pcyp -- cycle;
path3 outline3 = path3(outline);
surface s = surface(outline3);
draw(outline3, black + linewidth(2));
draw(s, red);
结果
奥格