-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhypercube_faces.py
More file actions
65 lines (57 loc) · 2.35 KB
/
Copy pathhypercube_faces.py
File metadata and controls
65 lines (57 loc) · 2.35 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
from math import cos, sin, pi
x1, y1, z1, w1 = 0, 0, 0, 0
x2, y2, z2, w2 = 1, 1, 1, 1
hypercube_points = {"p0": [x1, y1, z1, w1],
"p1": [x2, y1, z1, w1],
"p2": [x1, y2, z1, w1],
"p3": [x2, y2, z1, w1],
"p4": [x1, y1, z2, w1],
"p5": [x2, y1, z2, w1],
"p6": [x1, y2, z2, w1],
"p7": [x2, y2, z2, w1],
"p8": [x1, y1, z1, w2],
"p9": [z2, y1, z1, w2],
"p10": [x1, y2, z1, w2],
"p11": [x2, y2, z1, w2],
"p12": [x1, y1, z2, w2],
"p13": [x2, y1, z2, w2],
"p14": [x1, y2, z2, w2],
"p15": [x2, y2, z2, w2]}
def rotation_90degrees(p, axis1, axis2):
"""(p[0],
p[1] * cos(-pi / 2) + p[2] * sin(-pi / 2),
-p[1] * sin(-pi / 2) + p[2] * cos(-pi / 2),
p[3])"""
p[0] -= 0.5
p[1] -= 0.5
p[2] -= 0.5
p[3] -= 0.5
p[axis1], p[axis2] = (p[axis1] * cos(-pi/2) + p[axis2] * sin(-pi/2),
-p[axis1] * sin(-pi/2) + p[axis2] * cos(-pi/2))
p[0] = int(p[0] + 0.5)
p[1] = int(p[1] + 0.5)
p[2] = int(p[2] + 0.5)
p[3] = int(p[3] + 0.5)
return p
def draw_good_order(points):
good_points1 = ((x1, y1, z1, w1), (x2, y1, z1, w1), (x1, y2, z1, w1), (x2, y2, z1, w1), (x1, y1, z2, w1),
(x2, y1, z2, w1), (x1, y2, z2, w1), (x2, y2, z2, w1))
good_points2 = ((x1, y1, z1, w2), (z2, y1, z1, w2), (x1, y2, z1, w2), (x2, y2, z1, w2), (x1, y1, z2, w2),
(x2, y1, z2, w2), (x1, y2, z2, w2), (x2, y2, z2, w2))
result1 = [""] * 8
result2 = [""] * 8
for elt in points:
p = tuple(points[elt])
if p in good_points1:
result1[good_points1.index(p)] = elt
if p in good_points2:
result2[good_points2.index(p)] = elt
print(result1)
print(result2)
draw_good_order(hypercube_points)
for axis1 in range(2):
for axis2 in range(axis1+1, 4):
rotated_hypercube = hypercube_points.copy()
for point in rotated_hypercube:
rotated_hypercube[point] = rotation_90degrees(rotated_hypercube[point], axis1, axis2)
draw_good_order(rotated_hypercube)