
Ich versuche, dieReeb Folierung. Bisher habe ich den Code und das Bild unten. Das Problem ist, dass eine Oberfläche ganz leicht durch die davorliegende (durch die vorderste Oberfläche) hervorsteht. Sie sollten jeweils vollständig in der vorherigen verschachtelt sein, wie gebogene Blumentöpfe.
settings.outformat="pdf";
settings.prc=false;
settings.render=4;
import graph;
import graph3;
import three;
size(12cm,0);
real rcutoff=.8;
real rinner=1;
real router=2;
currentprojection=orthographic(1,-2,1);
currentlight=(1,-1,0.5);
real f(pair z) {return 1/(1-abs(z)^2);}
// We change variables so that the unit cylinder x^2+y^2<1 gets mapped to the torus.
triple changevariables(triple X)
{
return (
(router+rinner*X.x)*cos(X.z),
(router+rinner*X.x)*sin(X.z),
rinner*X.y
);
}
// g returns the location of a point on a ``paraboloid'' inside the unit cylinder with given angle and radius above the unit disk in the (x,y) plane.
triple g(pair p){
real x=p.x*cos(p.y), y=p.x*sin(p.y);
return (x,y,f((x,y)));
}
triple h(pair p){
return changevariables(g(p));
}
real anglestep=10;
for (int z = 0; z <= 20; ++z) {
draw(
rotate(-anglestep*z,Z)*surface(
h,
(0,0),
(rcutoff,2*pi),Spline
),lightgray+opacity(1)
);
// real zz=f((rcutoff,0));
// triple cent=changevariables((0,0,zz));
// draw(
// rotate(-anglestep,Z)*
// circle(c=cent, r=rcutoff,normal=(-router*sin(zz),router*cos(zz),0)),
// white
// );
}
Vielleicht wird das Problem noch deutlicher, wenn ich nur die letzten beiden Flächen in unterschiedlichen Farben zeichne:
Antwort1
Dies liegt nur an der numerischen Annäherung Ihrer Oberfläche mit den Bézier-Patches. Standardmäßig haben Sie 10 Maschen (oder 10x10). Abhängig von Ihrem PC können Sie die Anzahl der Maschen in Bezug auf die beiden Variablen unabhängig voneinander erhöhen. Hier habe ich die letzten beiden endgültigen Oberflächen mit getestet
draw(
rotate(-anglestep*z,Z)*surface(
h,
(0,0),
(rcutoff,2*pi),nu=16,nv=10,Spline
),lightgreen+opacity(1)
);
und es scheint in Ordnung zu sein.