A matematika nyelvén a hat dimenzió (6D) teljesen értelmezhető, ám a mi fizikai, háromdimenziós világunkban ezt közvetlenül nem tudjuk lerajzolni. A vizualizációhoz a 6D-s koordinátákat le kell képeznünk 2D-s vagy 3D-s térbe. Ezt leggyakrabban dimenziócsökkentéssel (pl. ortografikus vagy perspektivikus projekcióval) érik el.Az alábbi Python program a numpy és a matplotlib segítségével egy 6D-s hiperkockát (tesserakt általánosítása 6 dimenzióra) vetít ki egy képernyőn megjelenő 3D-s ábrára, amelyet az egér segítségével szabadon forgathatsz.
-------------
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from itertools import product
# 1. Definiáljuk a 6 dimenziós hiperkocka csúcsait (-1 és 1 közötti értékekkel)
vertices_6d = np.array(list(product([-1, 1], repeat=6)))
# 2. Határozzuk meg az éleket a 6D térben
# Két csúcs akkor és csak akkor van összekötve, ha pontosan egy koordinátájukban különböznek
edges = []
for i in range(len(vertices_6d)):
for j in range(i + 1, len(vertices_6d)):
if np.sum(np.abs(vertices_6d[i] - vertices_6d[j])) == 2:
edges.append((i, j))
# 3. Egyszerű ortografikus projekció: a 6D koordinátákat 3D-be képezzük
# (Általánosítva: az első 3 dimenziót vesszük, vagy tetszőleges lineáris transzformációt alkalmazunk)
def project_6d_to_3d(v_6d):
# Itt az első 3 dimenziót használjuk vizualizációs célra
return v_6d[:, :3]
# 4. Kirajzoló függvény
def draw_6d_hypercube():
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(111, projection='3d')
ax.set_title("6D hiperkocka 3D-s projekciója")
# Kezdeti 3D koordináták
projected_vertices = project_6d_to_3d(vertices_6d)
# Élek kirajzolása
for edge in edges:
p1 = projected_vertices[edge[0]]
p2 = projected_vertices[edge[1]]
ax.plot([p1[0], p2[0]], [p1[1], p2[1]], [p1[2], p2[2]], color='b', alpha=0.5)
# Csúcsok megjelölése
ax.scatter(projected_vertices[:, 0], projected_vertices[:, 1], projected_vertices[:, 2], color='r')
ax.set_xlabel('X tengely')
ax.set_ylabel('Y tengely')
ax.set_zlabel('Z tengely')
plt.show()
if __name__ == "__main__":
draw_6d_hypercube()
----------------
Nincsenek megjegyzések:
Megjegyzés küldése