2026. június 15., hétfő

5 dimenziós hiperkocka python nyelven

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