2026. június 21., vasárnap

Függvény átalakítás mérnöki és grafikai fejlesztés

Függvény átalakítás
------------------
import numpy as np

class GeometriaiTranszformaciok:
    def __init__(self, pontok):
        """
        Inicializálja a pontokat homogén koordinátákban.
        A pontok egy (N, 2) alakú mátrix vagy lista.
        """
        N = len(pontok)
        # Hozzáadjuk az 1-et a homogén koordinátákhoz (shape: N x 3)
        self.pontok = np.hstack((pontok, np.ones((N, 1))))

    def eltolas(self, tx, ty):
        """Eltolás vektor megadása szerint"""
        matrix = np.array([
            [1, 0, tx],
            [0, 1, ty],
            [0, 0, 1]
        ])
        return self._transzformacio(matrix)

    def forgatas(self, szog_fok):
        """Forgatás az origó körül fokban megadva"""
        radiant = np.radians(szog_fok)
        c = np.cos(radiant)
        s = np.sin(radiant)
        
        matrix = np.array([
            [c, -s, 0],
            [s,  c, 0],
            [0,  0, 1]
        ])
        return self._transzformacio(matrix)

    def skalazas(self, sx, sy):
        """Skálázás (nyújtás/zsugorítás) az x és y tengelyek mentén"""
        matrix = np.array([
            [sx, 0,  0],
            [0,  sy, 0],
            [0,  0,  1]
        ])
        return self._transzformacio(matrix)

    def tukrozes(self, x_tengelyre=False, y_tengelyre=False):
        """Tükrözés a tengelyekre"""
        mx = -1 if x_tengelyre else 1
        my = -1 if y_tengelyre else 1
        
        matrix = np.array([
            [mx, 0,  0],
            [0,  my, 0],
            [0,  0,  1]
        ])
        return self._transzformacio(matrix)

    def _transzformacio(self, transzformacios_matrix):
        """Privát metódus a transzformáció végrehajtására mátrix szorzással"""
        # A pontok (N x 3) mátrixát szorozzuk a (3 x 3) transzformációs mátrix transzponáltjával
        uj_pontok = np.dot(self.pontok, transzformacios_matrix.T)
        # Visszaadjuk az eredményt a homogén komponens levágásával (shape: N x 2)
        return uj_pontok[:, :2]

# --- Példa a használatra ---
if __name__ == "__main__":
    # Kezdeti alakzat csúcspontjai (pl. egy háromszög)
    eredeti_haromszog = np.array([
        [0.0, 0.0],
        [5.0, 0.0],
        [0.0, 5.0]
    ])
    
    # Példányosítás
    transzformator = GeometriaiTranszformaciok(eredeti_haromszog)
    
    # Művelet 1: Eltolás x=2, y=3 irányba
    eltolva = transzformator.eltolas(2, 3)
    print("Eltolt pontok:\n", eltolva)
    
    # Művelet 2: Forgatás 90 fokkal az origó körül
    forgatva = transzformator.forgatas(90)
    print("\n90 fokkal elforgatott pontok:\n", forgatva)
    
    # Művelet 3: Tükrözés az Y tengelyre
    tukrozve = transzformator.tukrozes(y_tengelyre=True)
    print("\nY tengelyre tükrözött pontok:\n", tukrozve)
...........................
Eltolt pontok:
 [[2. 3.]
 [7. 3.]
 [2. 8.]]

90 fokkal elforgatott pontok:
 [[ 0.000000e+00  0.000000e+00]
 [ 3.061617e-16  5.000000e+00]
 [-5.000000e+00  3.061617e-16]]

Y tengelyre tükrözött pontok:
 [[ 0.  0.]
 [ 5.  0.]
 [ 0. -5.]]

Nincsenek megjegyzések:

Megjegyzés küldése