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
|
#
# commutator.m
#
# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
#
X = [
0, 0, 0;
0, 0, -1;
0, 1, 0
];
Y = [
0, 0, 1;
0, 0, 0;
-1, 0, 0
];
Z = [
0, -1, 0;
1, 0, 0;
0, 0, 0
];
function retval = Dx(alpha)
retval = [
1, 0, 0 ;
0, cos(alpha), -sin(alpha);
0, sin(alpha), cos(alpha)
];
end
function retval = Dy(beta)
retval = [
cos(beta), 0, sin(beta);
0, 1, 0 ;
-sin(beta), 0, cos(beta)
];
end
t = 0.9;
P = Dx(t) * Dy(t)
Q = Dy(t) * Dx(t)
P - Q
(P - Q) * [0;0;1]
function retval = kurven(filename, t)
retval = -1;
N = 20;
fn = fopen(filename, "w");
fprintf(fn, "//\n");
fprintf(fn, "// %s\n", filename);
fprintf(fn, "//\n");
fprintf(fn, "#macro XYkurve()\n");
for i = (0:N-1)
v1 = Dx(t * i / N) * [0;0;1];
v2 = Dx(t * (i+1) / N) * [0;0;1];
fprintf(fn, "sphere { <%.4f,%.4f,%.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1));
fprintf(fn, "cylinder { <%.4f,%.4f,%.4f>, <%.4f, %.4f, %.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1), v2(1,1), v2(3,1), v2(2,1));
end
for i = (0:N-1)
v1 = Dx(t) * Dy(t * i / N) * [0;0;1];
v2 = Dx(t) * Dy(t * (i+1) / N) * [0;0;1];
fprintf(fn, "sphere { <%.4f,%.4f,%.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1));
fprintf(fn, "cylinder { <%.4f,%.4f,%.4f>, <%.4f, %.4f, %.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1), v2(1,1), v2(3,1), v2(2,1));
end
fprintf(fn, "sphere { <%.4f,%.4f,%.4f>, at }\n",
v2(1,1), v2(3,1), v2(2,1));
fprintf(fn, "#end\n");
fprintf(fn, "#declare finalXY = <%.4f, %.4f, %.4f>;\n",
v2(1,1), v2(3,1), v2(2,1));
fprintf(fn, "#macro YXkurve()\n");
for i = (0:N-1)
v1 = Dy(t * i / N) * [0;0;1];
v2 = Dy(t * (i+1) / N) * [0;0;1];
fprintf(fn, "sphere { <%.4f,%.4f,%.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1));
fprintf(fn, "cylinder { <%.4f,%.4f,%.4f>, <%.4f, %.4f, %.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1), v2(1,1), v2(3,1), v2(2,1));
end
for i = (0:N-1)
v1 = Dy(t) * Dx(t * i / N) * [0;0;1];
v2 = Dy(t) * Dx(t * (i+1) / N) * [0;0;1];
fprintf(fn, "sphere { <%.4f,%.4f,%.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1));
fprintf(fn, "cylinder { <%.4f,%.4f,%.4f>, <%.4f, %.4f, %.4f>, at }\n",
v1(1,1), v1(3,1), v1(2,1), v2(1,1), v2(3,1), v2(2,1));
end
fprintf(fn, "sphere { <%.4f,%.4f,%.4f>, at }\n",
v2(1,1), v2(3,1), v2(2,1));
fprintf(fn, "#end\n");
fprintf(fn, "#declare finalYX = <%.4f, %.4f, %.4f>;\n",
v2(1,1), v2(3,1), v2(2,1));
fclose(fn);
retval = 0;
end
function retval = kurve(i)
n = pi / 180;
filename = sprintf("f/%04d.inc", i);
kurven(filename, n * i);
end
for i = (1:60)
kurve(i);
end
|