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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/* -*-ePiX-*- */
#include "epix.h"
using namespace ePiX;
const double r_0(1); //0.75;
const double golden(0.5*(1+sqrt(5)));
Sphere S0(P(0,0,0), sqrt(3));
Sphere S1(P( 1, golden, 0), r_0);
Sphere S2(P(-1, golden, 0), r_0);
Sphere S3(P( 1,-golden, 0), r_0);
Sphere S4(P(-1,-golden, 0), r_0);
Sphere S5(P( 0, 1, golden), r_0);
Sphere S6(P( 0,-1, golden), r_0);
Sphere S7(P( 0, 1,-golden), r_0);
Sphere S8(P( 0,-1,-golden), r_0);
Sphere S9(P( golden, 0, 1), r_0);
Sphere Sa(P( golden, 0,-1), r_0);
Sphere Sb(P(-golden, 0, 1), r_0);
Sphere Sc(P(-golden, 0,-1), r_0);
Circle C1(S0*S1);
Circle C2(S0*S2);
Circle C3(S0*S3);
Circle C4(S0*S4);
Circle C5(S0*S5);
Circle C6(S0*S6);
Circle C7(S0*S7);
Circle C8(S0*S8);
Circle C9(S0*S9);
Circle Ca(S0*Sa);
Circle Cb(S0*Sb);
Circle Cc(S0*Sc);
// bold circle if facing camera, otherwise plain
void sphere_draw(const Circle& C)
{
if ((C.center()|camera.viewpt()) >= 0)
bold();
else plain();
C.draw();
}
void icosa()
{
// S0.draw();
sphere_draw(C1);
sphere_draw(C2);
sphere_draw(C3);
sphere_draw(C4);
sphere_draw(C5);
sphere_draw(C6);
sphere_draw(C7);
sphere_draw(C8);
sphere_draw(C9);
sphere_draw(Ca);
sphere_draw(Cb);
sphere_draw(Cc);
}
int main(int argc, char* argv[])
{
if (argc == 3)
{
char* arg;
double temp1, temp2;
temp1=strtod(argv[1], &arg);
temp2=strtod(argv[2], &arg);
tix()=temp1/temp2;
}
picture(P(-2,-2),P(2,2), "6x6in");
begin();
set_crop();
revolutions();
// draw frames
camera.at(sph(12, 0.5*tix(), 0.05));
red(-1.4); // nearly cyan
icosa();
camera.at(sph(12, 0.01+0.5*tix(), 0.05));
red(1.4);
icosa();
end();
}
|