1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import solids;
import animation;
currentprojection=orthographic((0,5,2));
currentlight=(0,5,5);
settings.thick=false;
settings.render=0;
int nbpts=200;
real step=2*pi/nbpts;
int angle=10;
unitsize(1cm);
triple[] P=new triple[nbpts];
for(int i=0; i < nbpts; ++i) {
real t=-pi+i*step;
P[i]=(3sin(t)*cos(2t),3sin(t)*sin(2t),3cos(t));
}
transform3 t=rotate(angle,(0,0,0),(1,0.25,0.25));
revolution r=sphere(O,3);
draw(surface(r),lightgrey);
draw(r,backpen=linetype("8 8",8));
animation A;
for(int phi=0; phi < 360; phi += angle) {
bool[] front=new bool[nbpts];
save();
for(int i=0; i < nbpts; ++i) {
P[i]=t*P[i];
front[i]=dot(P[i],currentprojection.camera) > 0;
}
draw(segment(P,front,operator ..),1mm+blue+extendcap);
draw(segment(P,!front,operator ..),grey);
A.add();
restore();
}
A.movie(0,200);
|