在 Asymptote 中绘制具有抛物线边缘的 3D 填充三角形

在 Asymptote 中绘制具有抛物线边缘的 3D 填充三角形

我需要绘制一个内部弯曲的填充 3D 三角形。我希望三角形内部有抛物线边缘和平滑的 NURBS 呈现,而不是小三角形的集合。我掌握的三角形信息是三个角和三个中边的 (x,y,z) 位置。任何建议都将不胜感激!

import three;
settings.render=8;
size(10cm);
currentprojection=perspective(50,80,50);

// Rational Bezier patch: // udegree=3, vdegree=3, nu=4, nv=4;

real[] uknot={0,0,0,0,1,1,1,1};
real[] vknot={0,0,0,0,1,1,1,1};
triple[][] P=scale3(20)*octant1.P;

// Optional weights:
real[][] weights=array(P.length,array(P[0].length,1.0));

write("P=");
write(P);

draw(P,uknot,vknot,weights,gray);

以上是我从网上找到并编辑的示例代码,生成了如下所示的图像。我打印了“P”变量数据,但我不明白它的含义。

P=
(20,0,0)    (20,0,11.0456949966159) (11.0456949966159,0,20) (0,0,20)
(20,11.0456949966159,0) (20,11.0456949966159,11.0456949966159)  (11.0456949966159,6.10036889791324,20)  (0,0,20)
(11.0456949966159,20,0) (11.0456949966159,20,11.0456949966159)  (6.10036889791324,11.0456949966159,20)  (0,0,20)
(0,20,0)    (0,20,11.0456949966159) (0,11.0456949966159,20) (0,0,20)

这些点是 Nurbs 曲面的控制点吗?我想要显示的问题是提供一个像该示例中那样的弯曲三角形,但我只需要使用三角形的角点和中边点。如能得到任何帮助,我将不胜感激!

在此处输入图片描述

谢谢,乔

答案1

定义triple[][] P贝塞尔曲面片的控制点。对于您的问题,角点和中边点不足以定义唯一的贝塞尔曲面片。我尝试使用 Asymptote 例程回答,其精神与八分圆定义相同(请参阅three_surface.asy)。使用path3长度 =<4(并且没有任何内部点,可选)的 ,可以构造曲面。

这是一个尝试

import three;
settings.render=8;
size(10cm);
currentprojection=perspective(50,80,50);


triple A=(0,1,0);
triple B=(1,0,0);
triple MAB=(.6,.6,0); //mid-edge (AB)
triple C=(0,0,1);
triple MAC=(0,.6,.6); // mid-edge
triple MBC=(.7,0,.7); //mid-edge

path3 gc1=(A..MAB..B); //to avoid computation
path3 gc2=(B..MBC..C); // I use asymptote path3 routine
path3 gc3=(C..MAC..A);
// I recover the different tangents in A, B, C 
// to construct a cycle-path3 of length 3.
path3 gc=point(gc1,0){dir(gc1,0)}..{dir(gc1,2)}point(gc1,2){dir(gc2,0)}
..{dir(gc2,2)}point(gc2,2){dir(gc3,0)}..{dir(gc3,2)}point(gc3,2)..cycle;

draw(surface(patch(gc)),lightgray);

draw(gc1^^gc2^^gc3);
dot((gc1^^gc2^^gc3),red); 

和图片 在此处输入图片描述

请测试并改进代码。

奥格

相关内容