summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/examples/animations/sphere.asy
blob: 125cecc5566cee8d2d32d3fd25e7d59486a788a0 (plain)
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);