Ez a program egy ötdimenziós kocka (penterakt) csúcsait és éleit generálja, majd egy mátrix transzformáció segítségével elforgatja és kirajzolja a síkra.
-------------
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import itertools
# 5D kocka csúcsainak generálása (-1 és 1 értékekkel)
points_5d = np.array(list(itertools.product([-1, 1], repeat=5)))
# Élek meghatározása (azok a csúcsok, amelyek pontosan egy koordinátában különböznek)
edges = []
for i in range(len(points_5d)):
for j in range(i + 1, len(points_5d)):
if np.sum(np.abs(points_5d[i] - points_5d[j])) == 2:
edges.append((i, j))
# Egyszerű forgató mátrixok az 5D térben
def rotate_5d(points, angles):
# Forgatás 5 dimenzióban (egyszerűsített síkok mentén)
c1, s1 = np.cos(angles[0]), np.sin(angles[0])
c2, s2 = np.cos(angles[1]), np.sin(angles[1])
rotated = np.copy(points)
for i in range(len(points)):
# x-y sík forgatás
x, y = rotated[i, 0], rotated[i, 1]
rotated[i, 0] = x * c1 - y * s1
rotated[i, 1] = x * s1 + y * c1
# z-w sík forgatás
z, w = rotated[i, 2], rotated[i, 3]
rotated[i, 2] = z * c2 - w * s2
rotated[i, 3] = z * s2 + w * c2
return rotated
# Matplotlib beállítása
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.title("5D Hiperkocka (Penterakt) vetülete")
angles = [0.0, 0.0]
try:
while True:
# Forgatási szögek növelése
angles[0] += 0.05
angles[1] += 0.03
# 5D koordináták forgatása
rotated_5d = rotate_5d(points_5d, angles)
# Dimenziócsökkentés: az első 3 dimenziót használjuk a 3D-s megjelenítéshez
projected_3d = rotated_5d[:, :3]
ax.clear()
ax.set_xlim3d(-2.5, 2.5)
ax.set_ylim3d(-2.5, 2.5)
ax.set_zlim3d(-2.5, 2.5)
ax.axis('off') # Keret kikapcsolása
# Élek kirajzolása
for edge in edges:
p1 = projected_3d[edge[0]]
p2 = projected_3d[edge[1]]
ax.plot([p1[0], p2[0]], [p1[1], p2[1]], [p1[2], p2[2]], color='blue', alpha=0.3)
# Pontok megjelenítése
ax.scatter(projected_3d[:, 0], projected_3d[:, 1], projected_3d[:, 2], color='red', s=10)
plt.pause(0.01)
except KeyboardInterrupt:
print("A rajzolás leállítva.")
-------------
Nincsenek megjegyzések:
Megjegyzés küldése