-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.eden
More file actions
119 lines (93 loc) · 2.99 KB
/
Copy pathmain.eden
File metadata and controls
119 lines (93 loc) · 2.99 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Literal 3.14f As #PI;
Literal 0.07f As #ThetaStep;
Literal 0.02f As #PhiStep;
Literal 30i As #WIDTH;
Literal 15i As #HEIGHT;
Literal #WIDTH * #HEIGHT As #SIZE;
Var Float A = 0.00f;
Var Float B = 0.00f;
List Char buffer = (#SIZE);
List Float zbuffer = (#SIZE);
Var String asciSymbols = ".,-~:;=!*#$@";
Var Int Ro = 3i;
Var Int Roo = 1i;
Var Int Ko = 4i;
Var Int Koo = #WIDTH * Ko * 3i / (8i * (Ro + Roo));
Function Int FillBuffer(Var Char symbol){
Loop(Var Int i = 0i; i < #SIZE; i = i + 1i){
buffer[i] = symbol;
};
};
Function Int FillZBuffer(Var Float digit){
Loop(Var Int i = 0i; i < #SIZE; i = i + 1i){
zbuffer[i] = digit;
};
};
Function Int ClearZBuffer(){
FillZBuffer(0.0f);
};
Function Int ClearBuffer(){
FillBuffer(' ');
};
Function Int ClearBuffers(){
ClearBuffer();
ClearZBuffer();
};
Function Int PrintBuffer(){
ConsoleGoHome();
Var String tmp = "";
Loop (Var Int i = 0i; i < #SIZE; i = i + 1i) {
If (i != 0i && i % #WIDTH == 0i) {
PrintLine(tmp);
tmp = "";
};
tmp = tmp + buffer[i];
};
If (tmp != "") {
PrintLine(tmp);
};
};
ConsoleClear();
Sisyphus{
Var Float cosA = CosinusR(A);
Var Float sinA = SinusR(A);
Var Float cosB = CosinusR(B);
Var Float sinB = SinusR(B);
ClearBuffers();
Loop(Var Float theta = 0f; theta < 2i * #PI; theta = theta + #ThetaStep){
Var Float cosTheta = CosinusR(theta);
Var Float sinTheta = SinusR(theta);
Loop(Var Float phi = 0f; phi < 2i * #PI; phi = phi + #PhiStep){
Var Float cosPhi = CosinusR(phi);
Var Float sinPhi = SinusR(phi);
Var Float circleX = Ro + Roo * cosTheta;
Var Float circleY = Roo * sinTheta;
Var Float x = circleX * (cosB * cosPhi + sinA * sinB * sinPhi) - circleY * cosA * sinB;
Var Float y = circleX * (sinB * cosPhi - sinA * cosB * sinPhi) + circleY * cosA * cosB;
Var Float z = 5i + cosA * circleX * sinPhi + circleY * sinA;
Var Float ooz = 1i / z;
Var Int xp = (#WIDTH / 2i + Koo * ooz * x);
Var Int yp = (#HEIGHT / 2i - Koo / 2i * ooz * y);
Var Int idx = xp + yp * #WIDTH;
Var Float luminance = cosPhi * cosTheta * sinB - cosA * cosTheta * sinPhi - sinA * sinTheta + cosB * (cosA * sinTheta - cosTheta * sinA * sinPhi);
If (idx >= 0i && idx < #SIZE && ooz > zbuffer[idx])
{
zbuffer[idx] = ooz;
Var Int lumIdx = luminance * 8i;
If (lumIdx < 0i){
lumIdx = 0i;
}
Else{
If (lumIdx > 11i){
lumIdx = 11i;
};
};
buffer[idx] = asciSymbols[lumIdx];
};
};
};
ConsoleGoHome();
PrintBuffer();
A = A + 0.04f;
B = B + 0.08f;
};