我正在尝试在 Asymptote 中重现这个霍普夫环面,具有类似的纹理(三种颜色交替):
所以我定义了一个这样的笔阵列:
pen[] fflag = {
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
.......
甚至包含更多元素:
pen[] flag;
for(int i = 0; i < 7500; ++i){
flag[4*i] = rgb("ffffffff");
flag[4*i+1] = rgb("ff0000ff");
flag[4*i+2] = rgb("0000ffff");
flag[4*i+3] = rgb("ff0000ff");
}
完整代码如下:
settings.render = 4;
settings.outformat = "eps";
size(300,0);
import graph3;
import palette;
//currentlight = light(gray(0.85), ambient=black, specularfactor=13, (0.5,0.5,1), specular=white, viewport=false);
currentprojection=orthographic(0,0,0);
limits((0,0,0),(12,12,12));
pen[] fflag = {
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff"),
rgb("ffffffff"), rgb("ff0000ff"), rgb("0000ffff"), rgb("ff0000ff")
};
pen[] flag;
for(int i = 0; i < 7500; ++i){
flag[4*i] = rgb("ffffffff");
flag[4*i+1] = rgb("ff0000ff");
flag[4*i+2] = rgb("0000ffff");
flag[4*i+3] = rgb("ff0000ff");
}
triple F(pair uv){
real t = uv.x;
real phi = uv.y;
real nlobes = 3;
real A = 0.44;
real G = pi/2 - (pi/2-A)*cos(nlobes*t);
real H = t + A*sin(2*nlobes*t);
real sinG = sin(G);
real p1 = cos(G) + 1;
real p2 = sinG * cos(H);
real p3 = sinG * sin(H);
real xden = sqrt(2*p1);
real cosphi = cos(phi);
real sinphi = sin(phi);
real x4 = cosphi*p1;
real x3 = sinphi*p1;
real x2 = cosphi*p2 - sinphi*p3;
real x1 = cosphi*p3 + sinphi*p2;
return (x1/(xden-x4), x2/(xden-x4), x3/(xden-x4));
}
surface s = surface(F, (0,0), (2pi,2pi), 60, 65, Spline);
s.colors(palette(s.map(abs), flag));
draw(s);
但结果是:
我不明白为什么我会得到这个结果。