------------------
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