Hogyan valósítsuk meg egy pont tengelyes tükrözését?

Az előző bejegyzésben egy adott pont megadott szöggel történő elforgatásával kapott pont meghatározásával foglalkoztunk, és erre három különböző számítási módszert alkalmazó függvényt definiáltunk. Most egy adott pont tengelyes tükrözéseképpen előálló pont meghatározása lesz a cél.

Ahogy a forgatásnál tettük most is két megközelítést alkalmazunk a tükörpont származtatására. Az egyik a koordinátageometriai. Ekkor eltolás, forgatás és újabb eltolás geometriai transzformációk sorozatával oldjuk meg a feladatot. Ezt láthatjuk alább vektorábrával szemléltetve, és alatta a lépéseket részletesen kifejtve.

Láthatjuk, hogy a forgatás műveletét is használtuk, tehát most nyert értelmet, hogy miért foglalkoztunk előzőleg a forgatással.

A tengelyesen tükrözött pont meghatározása komplex számok segítségével is lehetséges. Ennek levezetése:

E megoldásban az előzőhöz képest az előny, hogy nem kell használnunk se forgatást végző függvényt, se trigonometrikus függvényt, hanem csak a komplex számok alapműveleteit.

Mindenesetre két számítási módszer áll rendelkezésünkre, amelyek alapján egy-egy függvényt definiáltunk az alább látható módon. A vektorábra és a levezetések ismeretében ezek működése nem szorul részletesebb magyarázatra. A Pont típust, valamint a tükrözést koordinátageometriai módszerrel megoldó függvény működéséhez a forgatást végző függvényt az előző bejegyzésben szereplő definíciókból vesszük; erre utal az elején az import sor, ahol a point_rotation modul rotate_point függvénye bármelyik forgató függvény lehet az előző bejegyzésben definiáltakból.

Mivel két módszerünk is van, ezért ahogy a forgatásnál tettük, most is definiáltunk egy olyan objektumot PointReflector néven, amelyben a tükrözési algoritmust akár futási időben tudjuk változtatni. /Tehát, ahogy a forgatásnál, ebben az esetben is a stratégia tervezési mintát valósítottuk meg/

Azt, hogy a két, tengelyes tükrözést végző függvény helyesen működik és azonos eredményt ad, a következő néhány tesztsor eredménye igazolja:

E bejegyzés témájához a Python tudásépítés lépésről lépésre című e-könyv következő részei kapcsolódnak: az „Egymáshoz rendelve – függvények” fejezet „A függvény is objektum” alfejezete, valamint a „Beépített típusok nyilvános metódusai” fejezetben a format() függvény használata, továbbá a „Készétel fogyasztás – a szabványos könyvtár moduljainak használata” fejezetben a „Speciális konténer típusok” alfejezet „Mezőneves tuple – namedtuple” cím, a „Matematikai számítások támogatása” című alfejezet „Valós és komplex változós függvények” címe, amelyben a math modulok leírása és alkalmazása olvasható.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.