== Térobjektumok megjelenítésének lehetőségei a GeoGebrával

=== I. Bevezetés

A komputergrafika az informatika (Computer Science) egyik legdinamikusabban fejlődő területe.
Ma már szinte minden számítógép iránt egy kicsit is érdeklődő ember fantáziáját megmozgatják a
mai fantasztikus grafikai képességek, amire korunk eszközei lehetőséget teremtenek. Rengetegen el
kezdenek foglakozni a számítógépi grafikával, de igen hamar szembetalálkoznak olyan matematikai
hiányosságokkal, ami a későbbi továbbhaladásukat megakadályozza.

Előzetes ismeretként szükségünk van bizonyos mélységű tudásra a vektorok (műveletek), mátrixok
(műveletek) és a különböző koordináta-rendszerek (Descartes-féle, görbevonalú, polár, gömbi ...),
megjeleníthetőségi lehetőségekkel kapcsolatos témakörökből.

=== II. Tér leképezése síkra

N dimenziós alakzat pontjait vetítjük egy n-nél kevesebb dimenziójú koordináta-rendszerbe (például
4 dimenziós kocka vetítése síkra, hiperkocka.ggb).



\figure{bl_hiperkocka.ggb}

Leggyakrabban 3D → 2D vetítésről beszélünk.

\figure[600x400]{bl_fa.png}

Mi a közoktatásban leggyakrabban párhuzamos vetítéseket szoktunk alkalmazni térbeli vázlatrajzok készítésénél, azok közül is a legegyszerűbb a párhuzamos-merőleges vetítés: képsík az [x,y] sík, azaz bármely térbeli pont képpontjának z koordinátája 0 lesz, illetve mivel merőleges a vetítés, így az x és y koordináták változatlanul maradnak.

\figure[300x200]{bl_tengely.png}

Ha megtörtént a vetítés, egy statikus ábrát kapunk, az alakzat aktuális nézőpontból kapott síkbeli projekcióját. Ezt dinamikussá szeretnénk tenni, azaz hogy néz ki a térbeli alakzat síkbeli képe tetszőleges nézőpontból szemlélve. ---- === III. Transzformációs mátrixok Célunk, hogy tudjuk forgatni a térbeli alakzatot, így változtatva dinamikusan az aktuális nézethez tartozó képalakzatot. Ezt legegyszerűbben mátrixos alakban tudjuk kezelni. Tudunk az x,y,z tengely körül forgatni, vagy akár egyszerre több tengely körül is. Számolás után a következő forgatási mátrixokat kapjuk: $$ R_z = \left[ \begin{array}{cccc} \cos z & -\sin z & 0 & 0 \\ \sin z & \cos z & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array} \right], $$ $$ R_x = \left[ \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & \cos x & -\sin x & 0 \\ 0 & \sin x & \cos x & 0 \\ 0 & 0 & 0 & 1 \\ \end{array} \right], $$ $$ R_y = \left[ \begin{array}{cccc} \cos y & 0 & \sin y & 0 \\ 0 & 1 & 0 & 0 \\ -\sin y & 0 & \cos y & 0 \\ 0 & 0 & 0 & 1 \\ \end{array} \right]. $$ $$ R_{zxy} = R_y \cdot R_x \cdot R_z = $$ $$ \left[ \begin{array}{cccc} \cos y \cos z + \sin x \sin y \sin z & -\cos y \sin z \cos z \sin x \sin y & \cos x \cos y & 0 \\ \cos x \sin z & \cos x \cos z & -\sin x & 0 \\ -\cos z \sin y + \cos y \sin x \sin z & \sin y \sin z + \cos y \cos z \sin x & \cos x \cos y & 0 \\ 0 & 0 & 0 & 1 \end{array} \right] $$ A 4. sor és oszlop a homogén koordinátákat tartalmazza (kiegészítjük a tér pontjait a végtelen távoli, úgynevezett ideális pontokkal), de ennek a mi esetünkben jelenleg nincs jelentősége. ---- Példa:
Forgassuk el a P (3,-2,1) pontot az x tengely körül 45°-os szöggel.
Mik lesznek a pont koordinátái az elforgatás után?

Megoldás: $$ R_x \cdot P = \left[ \begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos x & -\sin x \\ 0 & \sin x & \cos x \end{array} \right]_{3x3} \cdot \left[ \begin{array}{c} 3 \\ -2 \\ 1 \\ \end{array} \right]_{3x1} = $$ $$ \left[ \begin{array}{c} 1 \cdot 3 + 0 \cdot (-2) + 0 \cdot 1 \\ 0 \cdot 3 + (-2) \cos 45^{\circ} + 1 \cdot (-\sin 45^{\circ}) \\ 0 \cdot 3 + (-2) \sin 45^{\circ} + 1 \cdot (\cos 45^{\circ}) \end{array} \right]_{3x1} = \left[ \begin{array}{c} 3 \\ \dfrac{-3 \sqrt{2}}{2} \\ \dfrac{\sqrt{2}}{2} \end{array} \right]_{3x1} $$ Látható, hogy ebben az esetben az x koordináta nem módosult (hiszen az x tengely körül forgattunk). Definiálunk egy 3 vektorból álló generátorrendszert, ez lesz a térbeli koordináta rendszerünk. Ezt négy ponttal tudjuk megtenni: az origó, és a 3 tengelyen 1-1 pont, ami az origótól egységnyi távolságra van, vagyis $(1,0,0)$, $(0,1,0)$ és $(0,0,1)$ koordinátájú pontok. Ezt a 3 pontot forgathatjuk tetszőleges tengely körül, vagyis a 3 pont mindegykét megszorozzuk az $R_{zxy}$ mátrix-al, majd az így kapott térbeli koordinátáknak elhagyjuk a z koordinátáját, így kapjuk meg a 3 pont síkbeli képét (alaprendszer1.ggb példa).

\figure{bl_alaprendszer1.ggb}

---- === IV. Megvalósítás a GeoGebrában ==== Az alaprendszer létrehozása Az előzőekben bemutatott megoldás didaktikai szempontból nem szolgáltat annyi plusz többletet, amennyi az időráfordítás a munkalapok elkészítéséhez. További didaktikai megfontolások miatt a következőképpen fogunk eljárni: kiválasztunk tetszőleges 2 forgatási mátrixot, majd ezeket összeszorozva kapunk egy két tengely körül tetszőleges forgatást biztosító mátrixot. Mivel két szöggel dolgozunk, így lehet egy referenciapontot létrehozni, melynek az aktuális $x$, és $y$ koordinátája fogja nyújtani az elforgatások mértékét radiánban. Bizonyos kondíciók mellett szimulálható a 3. tengely körüli tetszőleges forgatás is. * EX=(-sin(x(Referenciapont)), cos(x(Referenciapont)) cos(y(Referenciapont))) * EY=(cos(x(Referenciapont)), cos(y(Referenciapont)) sin(x(Referenciapont))) * EZ=(0, -sin(y(Referenciapont))) Kész az alaprendszerünk! (alaprendszer2.ggb).

\figure{bl_alaprendszer2.ggb} ---- ==== Kocka és egyéb poliéderek megjelenítése és forgatása Az alaprendszer segítségével egyszerűen tudunk kockát definiálni, ha a kocka egyik csúcsát az origóba toljuk, így csak párhuzamos egyeneseket kell húzni a tengelyekkel. Hosszútávon azonban ez a megoldás nem használatos. Látványosabb, hasznosabb a következő: a kocka középpontját fogjuk behelyezni az origóba. A kocka.ggb munkalapon látható a kocka 8 csúcsának definiálása.

\figure{bl_kocka.ggb}

A következő továbblépések egyszerűen megvalósíthatóak, pár kattintással és síkmértani szerkesztésekkel már: oktaéder, tetraéder, csonkolt kocka, csonkolt oktaéder, csonkolt tetraéder, különböző poliéderek, képek ráhelyezése poliéderekre… (kreativitásunk szab határt). ---- ==== Kúp megjelenítése és forgatása Az alapkör: a kocka egy lapjának 4 csúcsából indulunk ki, illetve ehhez keresünk egy 5. pontot, amire már illeszthető egy kúpszelet. Az 5. pontot két szomszédos pont felezgetéséből, majd az így kapott pontok és a középpont felezgetéséből, végül egy centrális tükrözésből nyerjük (lásd: kúp.ggb).

\figure{bl_kep.ggb}

A magasságot pedig a $z$ tengelyen elhelyezett egységvektor segítségével definiáljuk: $M = k \cdot z$, ahol $k$ egy csúszka aktuális értéke lehet.

Ennek segítségével egyszerű síkmértani szerkesztések során a következőkhöz juthatunk: csonkakúp, ferdekúp, hengerek, gúlák, hasábok…(kreativitásunk szab határt).

Hengert például az alapkör $z$ vektorral való eltolásával nyerhetünk. ---- ==== Gömb megjelenítése és forgatása A GeoGebra 4.0 verziójától lehetőség van listák kezelésére is. Ez lehet akár egy olyan adatsokaság, melynek elemei pontok. A leképezés során definiálunk szélességi és hosszúsági pontokat, melyeket listákba szervezünk, és ezekre a listákra kúpszeleteket fektetünk. Így egy forgatható gömböt kapunk (gömb.ggb).

\figure{bl_gomb.ggb}

---- === V. A GeoGebra 5.0 jelenlegi lehetőségei, hiányosságok A fentebb leírt módszert felhasználói szinten könnyebb lenne alkalmazni, ha az természetes módon a GeoGebra programkódjába lenne beépítve, kihasználva így a programozás adta lehetőségeket (például két trébeli alakzat metszetének automatikus meghatározása, ami a fentebb leírt rendszerben igen nehézkes lenne kivitelezni, és komoly matematikai ismereteket tenne szükségessé vagy esetleg láthatósági megjelenítések ...).

A GeoGebra 5.0 Béta pontosan ezt a célt tűzte ki: beépített, felhasználói szintű térobjektumok megjelenítése és velük való különböző operálási lehetőségek.

Jelenleg (2013-08-12) még igen erőteljes fejlesztés alatt áll, de remélhetőleg hamarosan egy magyar fejlesztőcsapat is segíteni fogja a végső arculat kialakítását.

\figure[600x300]{bl_gg5.png}

A fenti ábra mutatja a GeoGebra 5.0 eszköztáron elhelyezkedő lehetőségeit. Alapvetően a megjelenítés ugyanúgy néz ki, mint a 4.x verzió, a Nézet menü/3D-s nézet menüponttal tudjuk megjeleníteni a valódi, beépített térmunkalapot. Ekkor lehetőségünk van arra, hogy a síkmunkalap össze legyen kötve a 3d-s munkalappal, vagy tőle független legyen.

Lehetőségünk van tehát pontok, egyenesek, szakaszok, vektorok megjelenítésére, illetve sík, gömb és hasábok, gúlák kifeszítésére is. Sajnos jelenleg csak az eltolás geometriai transzformáció működik beépített transzformációként a térben.

További hasznos és teljesen működő funkció a különböző (axonometrikus, perspektivikus) nézetek közötti könnyed váltási lehetőség. Így egy már elkészített térbeli dinamikus ábrát egy kattintásra más jellegű leképezésben tudjuk szemlélni.

Sajnos a jelenlegi verzió sok hasznos funkciót nem tartalmaz még, de a tervben már szerepel, érezhető ez a feltett eszköztár-gombokon is (például két térobjektum metszete gomb elérhető már, a hozzá tartozó programkód még nem teljes).

Hiányosságként felróható, és tapasztalható a béta verzióban eltöltött több órányi szerkesztés után, hogy néha egyszerűen eltűnnek az alakzatok, és nem is lehet őket visszahozni, ha nem készítettünk mentést előtte. Bizonyos kondíciók mellett instabillá válhat a 3d-s megjelenítés.

Ettől függetlenül a már meglévő funkciókkal is (akár kiegészítve a használatot a 4.x-el) már számos helyen, oktatási intézményekben kiválóan használható olyan térgeometriai ismeretek prezentálására, amiket hagyományos modell eszközök segítségével nehézkes, vagy lehetetlen lenne bemutatni (inverzi.ggb).

\figure{bl_inverzio.ggb}
1 2 3 4 5 6 7 8