Avaruuden muunnokset Jukka Liukkonen 24. joulukuuta 2009
Sisältö 1 Johdanto 1 2 Vektorilaskennan kertaus 3 2.1 Vektorit koordinaatistossa........................... 7 3 Siirto 9 3.1 Siirto koordinaatistossa............................. 10 4 Vents 10 4.1 Vents koordinaatistossa........................... 11 5 Viistoutus 12 5.1 Viistoutus koordinaatistossa.......................... 13 6 Peilaus ja projektio 14 6.1 Peilaus ja projektio koordinaatistossa..................... 15 7 Kierto 16 7.1 Kierto koordinaatistossa............................ 18 8 Aktiiviset ja passiiviset muunnokset 18 8.1 Muunnosten hdistäminen........................... 22 9 Affiinit muunnosmatriisit 25 10 Matriisipino 28
1 1 Johdanto Avaruuden muunnokset eli transformaatiot ovat kätännössä laskentakaavoja, joilla mille tahansa avaruuden pisteelle lödetään uusi paikka avaruudessa. Esimerkiksi muunnos f(,, ) = ( +, +, + ) muuntaa pisteen (1, 2, 3) pisteeksi (1 + 2, 2 + 3, 1 + 3) = (3, 5, 4). Transformaatio tavallaan siirtää pisteen (1, 2, 3) uuteen paikkaan. Samoin piste (3, 1, 2) lötää uuden sijainnin paikasta (3 + ( 1), 1 + 2, 3 + 2) = (2, 1, 5). Kun muunnoskaavaa sovelletaan kaikkiin avaruuden pisteisiin, koko avaruus muuttuu ainakin melkein, sillä origo (0, 0, 0) ps paikallaan. Avaruuden pisteet voidaan kuvitella kolmiulotteisen digikuvan värillisinä pikseleinä. Muunnoksessa pikselit siirtvät, ja kuva muuttuu. Tekemällä iso määrä pieniä muunnoksia hvin nopeasti peräkkäin avaruus saadaan elämään: snt kolmiulotteinen animaatio. Matematiikan kielellä ilmaistuna avaruuden muunnos on kolmen reaalimuuttujan funktio, jonka arvot ovat reaalilukukolmikoita. Vaikka muunnos f edellä määriteltiin kättäen koordinaatteja, ja, muunnosten leinen käsittel voidaan tehdä ilman koordinaatteja vektoreilla, kunhan origon O paikka tunnetaan. Vektori on olio, jolla on suuruus eli itseisarvo ja suunta, mutta ei kiinteää paikkaa. Vektoreita havainnollistetaan nuolilla. Nuolen pituus vastaa vektorin itseisarvoa, ja nuolen suunta vektorin suuntaa. Kaksi eri paikkaan sijoitettua nuolta kuvaavat samaa vektoria, jos nuolet ovat saman pituisia ja suuntaisia. Jokaisella avaruuden pisteellä on paikkavektori. Se ajatellaan tavallisesti nuolena, joka lähtee origosta ja päät kseiseen pisteeseen. Pisteet ja vektorit vastaavat toisiaan kääntäen ksikäsitteisesti: 1) jokaisella avaruuden pisteellä on täsmälleen ksi paikkavektori, ja 2) jokaista vektoria voidaan pitää täsmälleen hden pisteen paikkavektorina ajattelemalla vektori origosta lähteväksi nuoleksi. Koska pisteet ja vektorit vastaavat toisiaan, pisteiden liikuttelu voidaan tulkita paikkavektorien liikutteluna. Paikkavektoreita kuvaavien nuolien lähtöpisteet säilvät origossa, mutta niiden kärjet liikkuvat. Tässä käsiteltävät muunnokset ovat siirto, vents, viistoutus, peilaus, projektio ja kierto. Siirtoa lukuunottamatta ne ovat kaikki ns. lineaarisia muunnoksia: ne on mahdollista toteuttaa koordinaatteja kättäen matriisikertolaskuna. Esimerkiksi edellä esitelt muunnos f on matriiseilla kirjoitettuna = 1 1 0 0 1 1 1 0 1 = + + + Avaruuden pisteet käsitetään matriisiesitksissä 3 1 -pstvektoreina. Tässä,, ovat pisteen koordinaatit ennen muunnosta, ja,, ovat koordinaatit muunnoksen jälkeen. Jos kaikki edellä luetellut muunnostpit, siirto mukaanlukien, halutaan saman nimen
2 1 JOHDANTO alle, pitää puhua affiineista muunnoksista. Affiinin muunnoksen leinen muoto on = a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 + s s s (1) eli lhemmin merkinnöin X = AX + S. (2) Affiini muunnos on täten lineaarisen muunnoksen AX ja siirron summa. Pstvektori S edustaa siirtoa, jossa pisteen -koordinaattiin lisätään vakio s, -koordinaattiin lisätään vakio s 2 ja -koordinaattiin lisätään vakio s. Muunnos siis sijoittelee avaruuden pisteitä uusiin paikkoihin. Erilaiset geometriset kuviot koostuvat pisteistä. Esimerkiksi avaruuden ksikköpallo koostuu kaikista niistä pisteistä, joiden etäiss origosta O on tasan ksi. Kun pisteitä liikutellaan, samalla liikkuvat geometriset kuviot. Yksikköpallo saattaa venä soikeaksi ellipsoidiksi, ja kuutio voi muuttua suuntaissärmiöksi, jonka kaksiulotteinen vastine on suunnikas. Projektio romahduttaa koko avaruuden tasoksi, jolloin tasoa vastaan kohtisuorat suorat eli tason normaalit romahtavat tason pisteiksi. Avaruus saattaa romahtaa affiinissa muunnoksessa mös suoraksi tai jopa pisteeksi. Jos tällaista romahdusta alempiulotteiseksi avaruudeksi ei tapahdu, muunnosta kutsutaan affiiniksi isomorfismiksi. Sellaisessa suorat säilvät suorina, tasot tasoina, kolmiot kolmioina jne. Suora voi vaihtaa sekä sijaintiaan että suuntaansa affiinissa isomorfismissa, mutta se on muunnoksen jälkeenkin edelleen suora. Mös hdensuuntaisuus säil: jos tasot ovat hdensuuntaiset ennen muunnosta, ne ovat sitä affiinilla isomorfismilla muunnettuinakin. Sama koskee hdensuuntaisia suoria. Sitävastoin kohtisuoruus ei leensä säil. Ihminen näkee kolmiulotteisesta kappaleesta tavallisesti vain pinnan. Sen takia tietokonegrafiikassa kappaleet esitetään niitä rajaavina pintoina. Nämä pinnat puolestaan kootaan pienenpienistä tasonpalasista. Esimerkiksi pallopinta voidaan panna kokoon kolmioista. Kun ne ovat riittävän pieniä ja niitä on hvin paljon, silmä luulee pintaa sileäksi. Pallon piirtämiseksi tietokoneelle on kerrottava jokaisen pikkukolmion sijainti avaruudessa antamalla sen kärkipisteiden koordinaatit. Kun koordinaatit on annettu, tietokoneohjelma huolehtii kolmion piirtämisestä. Mitä tapahtuu, jos jokaisen kolmion kärkipisteisiin kohdistetaan transformaatio? Kun kaikki muunnetut kolmiot piirretään, millaiseksi pallo muovautuu? Kuvasta 1 nähdään, miten edellä määritelt transformaatio f muuttaa palloa.
3 Kuva 1. Kolmioista rakennetun pallon muuttuminen, kun jokaisen kolmion jokaista kärkipistettä (,, ) muutetaan transformaatiolla f(,, ) = (+, +, +). Vasemmalla on alkuperäinen pallo. Oikealla on pallo muunnoksen jälkeen. 2 Vektorilaskennan kertaus Jotta esits ei paisuisi kovin pitkäksi, lukijalta odotetaan vektorilaskennan perusteiden tuntemusta. Muutamat asiat kerrataan. Vektorilaskenta voidaan käsitellä koordinaatistoista riippumattomasti. Kätännön laskut tehdään kuitenkin koordinaatteja kättäen. Jatkossa asiat esitetään ensiksi ilman koordinaatteja ja sen jälkeen perinteisessä suorakulmaisessa, oikeakätisessä -koordinaatistossa. Oikeakätiss tarkoittaa sitä, että positiivinen -akseli osoittaa lukijaa kohti, kun positiivinen -akseli osoittaa oikealle ja positiivinen -akseli lös. Kaikkia ksikön mittaisia vektoreita kutsutaan ksikkövektoreiksi. Vektorin u suuntainen ksikkövektori û saadaan kertomalla u pituutensa käänteisluvulla: û = 1 u u = u u. Vektorien u ja v skalaaritulo eli pistetulo u v määritellään asettamalla u v = u v cos α, missä α on vektorien u ja v välinen kulma. Eritisesti Kuvassa 2 vektori v on esitett summana u u = u 2. v = v u + v, missä v u on vektorin u suuntainen ja v on vektoria u vastaan kohtisuora vektori. Sanotaan, että v u on vektorin v vektoriprojektio vektorilla u, ja v on vektorin v kohtisuora komponentti.
4 2 VEKTORILASKENNAN KERTAUS v v u v u α Kuva 2. Vektorin v vektoriprojektio v u ja kohtisuora komponentti v = v v u. Lukua v u = sanotaan vektorin v skalaariprojektioksi vektorilla u. Skalaariprojektion itseisarvo on vektoriprojektion pituus, sillä v u u (3) v u = v u u = v u cos α u = v cos α = { vu, 0 α π/2 v u, π/2 α π. Vektoriprojektiolle saadaan kätevä esits skalaariprojektion ja skalaaritulon avulla: v u = v u û = v u u u u = v u u 2 u. Siis v u = v u û = v u u. (4) u 2 Kun vektoriprojektio tunnetaan, kohtisuora komponentti on helppoa laskea: v = v v u. (5) Tason tai sen osan normaalivektorilla tarkoitetaan sellaista vektoria, joka on kohtisuorassa tasoa vastaan. Normaalivektoreille on kättöä esimerkiksi valaistuslaskuissa: mitä
5 pienemmästä kulmasta tasonpalasta valaistaan, sitä tummempana kseinen palanen nähdään. Kun normaalivektori käänt kohti valonlähdettä, pala nättää kirkastuvan. Jos normaalivektori osoittaa valon kulkusuuntaan, pinta on täsin pimennossa normaalivektorin puolelta. Normaalivektoreita lasketaan vektoritulon eli ristitulon avulla. Vektorien u ja v vektoritulo u v on vektori u v = u v sin α e, missä α on vektorien u ja v välinen kulma, ja e on ksikkövektori, joka on kohtisuorassa sekä vektoria u että vektoria v vastaan (ks. kuva 3). Kohtisuoruusehto ei vielä määrää vektoria e ksikäsitteisesti, sillä mös sen vastavektori e on kohtisuorassa. Sen takia vaaditaan, että vektorit u, v ja e lueteltuina nimenomaan tässä järjestksessä muodostavat oikeakätisen järjestelmän: kun oikean käden keskisormi ( e-sormi) asetetaan kaikkein luonnollisimmalla tavalla etusormeen ( v-sormi) ja peukaloon ( u-sormi) nähden kohtisuoraan, peukalo, etusormi ja keskisormi tässä järjestksessä lueteltuina muodostavat oikeakätisen järjestelmän. Vasemmasta kädestä saataisiin samalla periaatteella vektorin e vastavektori. Ristitulon tekijöiden järjestksen vaihtaminen vastaa etumerkin vaihtamista: v u = u v. Jos u ja v ovat kohtisuorassa toisiaan vastaan ja v on ksikövektori, vektoritulon määritelmän suorana seurauksena saadaan ( u v) v = u ja u ( v v) = 0. Liitäntälaki ei siis päde vektoritulolle: leensä ( u v) w ja u ( v w) johtavat eri lopputulokseen. On tärkeää merkitä sulut aina näkviin. Vektoritulon u v itseisarvo u v on sen suunnikkaan ala, jonka klkinä ovat vektorit u ja v. Tämä on helppoa nähdä piirtämällä kuva. Skalaaritulon ja vektoritulon hdistelmänä saadaan skalaarikolmitulo u v w. Siihen ei tarvitse merkitä sulkuja näkviin, sillä sen voi tulkita vain hdellä tavalla (so. vektoritulo lasketaan ensin). Olkoot avaruudessa leijuvan kolmion nurkkapisteiden paikkavektorit r 1, r 2 ja r 3. Silloin vektorit u = r 2 r 1 ja v = r 3 r 1 ovat kolmion klkinä, ja niiden ristitulo u v on kohtisuorassa kolmiota vastaan (ks. kuva 4). Tätä ristituloa voidaan kättää valaistuslaskuissa. Usein vaaditaan, että normaalivektorit normeerataan eli muutetaan ksikön mittaisiksi. Kolmioesimerkissä kättökelpoinen normaalivektori olisi siis n = u v u v = ( r 2 r 1 ) ( r 3 r 1 ) ( r 2 r 1 ) ( r 3 r 1 ).
6 2 VEKTORILASKENNAN KERTAUS u v e v α u Kuva 3. Vektoritulo u v on kohtisuorassa vektoreita u ja v vastaan. Yksikkövektori e määrät oikean käden säännöstä. u v v r 3 r 1 u r 2 O Kuva 4. Kolmion normaalivektorin määrittäminen, kun kärkien paikkavektorit r 1, r 2 ja r 3 tunnetaan.
2.1 Vektorit koordinaatistossa 7 2.1 Vektorit koordinaatistossa Kätännön vektorilaskut tehdään koordinaatteja kättäen. Standardiksi muodostuneessa oikeakätisessä suorakulmaisessa -koordinaatistossa (ks. kuva 5) vektorit lausutaan kantavektorien i, j ja k avulla. Ne ovat ksikkövektoreita ja kohtisuorassa toisiaan vastaan. Mainitussa järjestksessä lueteltuina nämä ns. standardikantavektorit muodostavat oikeakätisen järjestelmän. Jokaisella avaruuden vektorilla v on ksikäsitteinen esits kantavektorien avulla (ks. kuva 6): Yksikäsitteiss tarkoittaa sitä, että htälö v = v i + v j + v k. v i + v j + v k = v1 i + v 2 j + v 3 k on voimassa vain, jos v = v 1, v = v 2 ja v = v 3. k i j Kuva 5. Avaruuden perinteinen -koordinaatisto ja ksikön mittaiset kantavektorit i, j sekä k. Koordinaatisto ajatellaan oikeakätiseksi, jolloin vinoon piirrett -akseli todellisuudessa osoittaa lukijaan päin kohtisuorasti.
8 2 VEKTORILASKENNAN KERTAUS v v k v i k i j v j Kuva 6. Avaruuden vektorin v esittäminen komponenteittain kantavektorien i, j ja k avulla muodossa v = v i + v j + v k. Kantavektorien i, j ja k kertotaulujen i j k i 1 0 0 j 0 1 0 k 0 0 1 i j k i 0 k j j k 0 i k j i 0 avulla saadaan vektorien skalaari- ja vektoritulolle esitkset u v = u v + u v + u v u = u i + u j + u k v = v i + v j + v k u v = (u v u v ) i + (u v u v ) j + (u v u v ) k. Ristitulo esitetään usein helposti muistettavana determinanttikaavana: i j k u v = u u u v v v.
9 Itseisarvolle tulee htälöstä u 2 = u u laskentakaava u = u 2 + u 2 + u 2. Se on Pthagoraan lauseen leists kolmeen ulottuvuuteen. Merkitsemällä u v 0 u u U = u, V = v ja U = u 0 u (6) u v u u 0 voidaan kirjoittaa u v = U T V (7) u v = UV. (8) 3 Siirto Yksinkertaisin avaruuden muunnoksista on siirto eli translaatio. Siinä avaruuden kaikkia pisteitä siirretään tiettn suuntaan tiett matka. Suunta ja matka hdessä muodostavat vaktorin, jonka itseisarvo on siirtomatkan pituus. Kun tämä vektori tunnetaan, mös siirto tunnetaan tädellisesti. Tällaisessa tilanteessa on tapana sanoa, että translaatiolla on ksi ainut parametri, ja se on kseinen vektori. Kuvassa 7 on esitett siirto vektorin s verran paikkavektorien avulla. r s r O Kuva 7. Paikkavektorin r kärki siirt vektorin s verran paikkavektoriksi r. Siirretn pisteen paikkavektori r lasketaan alkuperäisen pisteen paikkavektorista r kaavalla r = r + s. (9)
10 4 VENYTYS 3.1 Siirto koordinaatistossa Koordinaatteja kätettäessä kaavassa (9) esiintvillä vektoreilla on esitkset r = i + j + k r = i + j + k s = s i + s j + s k. Yhtälö (9) koordinaattien avulla kirjoitettuna on i + j + k = i + j + k + s i + s j + s k = ( + s ) i + ( + s ) j + ( + s ) k. Kantavektorien i, j ja k kertoimien vasemmalla ja oikealla pitää olla pareittain samat, josta saadaan koordinaateille muunnoskaava = + s = + s. (10) = + s Matriisihtälöksi kirjoitettuna X = X + S, (11) missä X =, X =, S = s s s 4 Vents Kun avaruuden pisteiden välimatkoja muutetaan esimerkiksi kaksinkertaisiksi tai puoleen alkuperäisestä, ksms on ventksestä siis kutistuskin käsitetään tässä ventkseksi. Välimatkojen kaksinkertaistuessa sanotaan, että ventskerroin on 2. Jos välimatkat kutistuvat kolmasosaan alkuperäisestä, ventskerroin on 1/3. Vents voidaan rajoittaa koskemaan vain tietnsuuntaisia välimatkoja. Silloin vents ilmoitetaan hden ainoan parametrin, ventsvektorin, avulla. Ventksen suunta on sama kuin ventsvektorin suunta, ja ventskerroin on ventsvektorin itseisarvo. Ventksessä pisteiden etäisdet origon kautta kulkevasta, ventsvektoria vastaan kohtisuorasta tasosta muuttuvat ventskertoimen ilmoittamalla määrällä. Tason pisteet psvät paikallaan, ja muut pisteet liikkuvat tasoa vastaan kohtisuorassa suunnassa. Ventstä on havainnollistettu kuvassa 8.
4.1 Vents koordinaatistossa 11 r r r r v v O v =2 Kuva 8. Vents vektorilla v. Paikkavektorin r vektorin v suuntainen komponentti r v ven kertoimella v, jolloin r muuttuu paikkavektoriksi r. Kohtisuora komponentti r säil ennallaan. Yhtälöiden (4) ja (5) perusteella r = r + v r v (5) = r r v + v r v = r + ( v 1) r v (4) = r + v 1 v 2 ( r v) v. Vents noudattaa siis kaavaa r = r + v 1 v 2 ( r v) v. (12) 4.1 Vents koordinaatistossa Esitksiä r = i + j + k r = i + j + k v = v i + v j + v k.
12 5 VIISTOUTUS kättämällä htälö (12) saa muodon i + j + k = i + j + k + v 1 (v v 2 + v + v )(v i + v j + v k) [ = + v 1 ] (v v 2 v + v v + v v ) i [ + v 1 ] (v v 2 v + v v + v v ) j [ + v 1 ] (v v 2 v + v v + v v ) k. Kantavektorien kertoimista saadaan htälöt = + v 2 ( v 1)(v v + v v + v v ) = + v 2 ( v 1)(v v + v v + v v ) = + v 2 ( v 1)(v v + v v + v v ). (13) Vektorien matriisiesitkset ovat X =, X = Matriisitulon määritelmän nojalla, V = V T V = v 2 + v 2 + v 2 = v 2 ja V V T = v v v v v v v v v v v v v v v v v v v v v Vertaamalla htälöihin (13) saadaan matriisimuotoinen muunnoskaava ( ) V T X V 1 = I + V V T X, (14) V T V missä I tarkoittaa ksikkömatriisia: I = 1 0 0 0 1 0 0 0 1 5 Viistoutus Olkoot u ja v kaksi toisiaan vastaan kohtisuoraa vektoria. On vain ksi origon kautta kulkeva taso T, joka on kohtisuorassa vektoria u vastaan. Taso jakaa avaruuden kahteen identtiseen puoliskoon. Ne erotetaan toisistaan sen perusteella, kummalla puolella vektoria u kuvaavan, origosta lähtevän nuolen kärki on. Vektori v on tason T suuntainen.
5.1 Viistoutus koordinaatistossa 13 Viistoutuksessa avaruuden pistettä siirretään vektorin v suunnassa tai sille vastakkaisessa suunnassa matka, joka on suoraan verrannollinen pisteen etäisteen d tasosta T. Jos piste on u-nuolen kärjen puolella, piste siirt vektorin v suuntaan; toisella puolella siirtmä on vastakkaissuuntainen. Piste siirt täsmälleen matkan d v (ks. kuva 9). Paikkavektoreilla ilmaistuna viistoutus tapahtuu seuraavasti: r = r + r u v. (15) Viistoutuksella on siis kaksi parametria: u ja v. Pisteen siirtmäsuunta määrät kummankin parametrin perusteella, mutta siirtmän suuruus riippuu ksinomaan parametrista v. Siis kaikki vektorin u kanssa samansuuntaiset vektorit nollavektoria lukuunottamatta määräävät saman transformaation. 5.1 Viistoutus koordinaatistossa Skalaariprojektion määritelmästä (3) ja transformaatiokaavasta (15) saadaan r = r + r u u v ja edelleen koordinaattimuodossa kirjoitettuna i + j + k = i + j + k + 1 u (u + u + u )(v i + v j + v k) [ = + 1 ] u (v u 2 + v u + v u ) i [ + 1 ] u (v u 2 + v u + v u ) j [ + 1 ] u (v u 2 + v u + v u ) k.
14 6 PEILAUS JA PROJEKTIO r u v r u r r u r u = 3 O v Kuva 9. Paikkavektorin r viistoutus toisiaan vastaan kohtisuorilla vektoreilla u ja v tehdään lisäämällä vektoriin r vektori v ventettnä kertoimella r u. Paikkavektorin r kärki siirt vektorin r u v verran, jolloin r viistoutuu paikkavektoriksi r. Kantavektorien kertoimille pätee = + u 1 (v u + v u + v u ) = + u 1 (v u + v u + v u ) = + u 1 (v u + v u + v u ), (16) joka on matriisimuodossa X = ( ) 1 I + U T U V U T X, (17) 6 Peilaus ja projektio Kolmiulotteisessa avaruudessa peilataan origon O kautta kulkevan tason T suhteen aivan samalla tavalla kuin tasossa origon kautta kulkevan suoran suhteen. Kuvassa 10 katsoja on sijoittunut siten, että hän näkee tason horisontaalisena suorana. Normaalivektori n määrää tason ksikäsitteisesti.
6.1 Peilaus ja projektio koordinaatistossa 15 n r T O θ θ p p r r p r Kuva 10. Paikkavektori r peilautuu paikkavektoriksi r. Oletetaan, että n = 1. Yhtälöstä p r / r = cos θ seuraa p r = r cos θ = r n cos θ = r n. Koska p r ja n ovat vastakkaissuuntaisia, on oltava Siis peilaus noudattaa kaavaa p r = ( r n) n. r = r 2( r n) n. (18) Jos peilaus jätetään puolitiehen, koko kolmiulotteinen avaruus projisoituu kaksiulotteiseksi tasoksi T : r = r ( r n) n. (19) 6.1 Peilaus ja projektio koordinaatistossa Peilauksen muunnoskaava (18) on standardikannassa i + j + k = i + j + k 2(n + n + n )(n i + n j + n k) = [ 2(n n + n n + n n )] i [ 2(n n + n n + n n )] j [ 2(n n + n n + n n )] k
16 7 KIERTO eli = 2(n n + n n + n n ) = 2(n n + n n + n n ) = 2(n n + n n + n n ). (20) Sama matriisimuodossa kirjoitettuna: Projektiolle vastaavasti X = ( I 2NN T ) X, (21) = (n n + n n + n n ) = (n n + n n + n n ) = (n n + n n + n n ) (22) eli X = ( I NN T ) X. (23) 7 Kierto Tarkastellaan kolmiulotteisen avaruuden R 3 kiertoa origon O kautta kulkevan akselin mpäri positiiviseen kiertosuuntaan kulman θ verran. Olkoon n akselin suuntavektori, ja n = 1. Positiivinen kiertosuunta määrät oikean käden säännöstä: kun suuntavektorista tartutaan kiinni oikealla kädellä peukalo ojennettuna vektorin suuntaan, muut sormet osoittavat positiivisen kiertosuunnan. Vektoria n vastaan kohtisuoralle vektorille v on voimassa n ( n v) = v. (24) Kiertköön paikkavektori r paikkavektoriksi r. Näillä vektoreilla on hteinen vektoriprojektio p kiertoakselilla (ks. kuva 11). Erotuksen r p projektio a vektorilla r p ja projektio b vektorilla n ( r p) ovat toisiaan vastaan kohtisuorassa (ks. kuva 12). Yhtälöstä r p = r p ja kuvan 12 suorakulmaisista kolmioista nähdään, että a = ( r p ) cos θ, (25) b = n ( r p ) sin θ = n r sin θ. (26) Tässä n p = 0, sillä n ja p ovat hdensuuntaiset. Yhtälön (24) perusteella p r = n ( n ( r p )) = n ( n r ). (27)
17 n r p θ r p r O Kuva 11. Paikkavektori r kiert paikkavektoriksi r. n ( r p) r p b n ( n ( r p)) θ a r p Kuva 12. Tilanne kiertoakselilta katsottuna.
18 8 AKTIIVISET JA PASSIIVISET MUUNNOKSET Siis r = p + a + b (25)&(26) = p + ( r p ) cos θ + n r sin θ = r + ( p r )(1 cos θ) + n r sin θ (27) = r + n r sin θ + n ( n r ) (1 cos θ). Näin on päädtt Rodriguesin rotaatiokaavaan: r = r + n r sin θ + n ( n r ) (1 cos θ). (28) 7.1 Kierto koordinaatistossa Yhtälöstä (28) nähdään välittömästi, että [ ] X = I N sin θ + N 2 (1 cos θ) X. (29) Kaavan (6) mukaisesti N X tarkoittaa ristitulon n r matriisiesitstä. Auki kirjoitettuna (29) saa muodon = [1 (n 2 + n 2 )(1 cos θ)] + [n n (1 cos θ) + n sin θ] +[n n (1 cos θ) n sin θ] = [n n (1 cos θ) n sin θ] + [1 (n 2 + n 2 )(1 cos θ)] +[n n (1 cos θ) + n sin θ]. (30) = [n n (1 cos θ) + n sin θ] + [n n (1 cos θ) n sin θ] +[1 (n 2 + n 2 )(1 cos θ)] 8 Aktiiviset ja passiiviset muunnokset Edellä tarkasteltiin tilannetta, jossa avaruuden pisteitä liikuteltiin koordinaatiston psessä kiinteästi paikallaan. Tällaista tarkastelutapaa kutsutaan muunnoksen aktiiviseksi tulkinnaksi. Muunnos voidaan ajatella toteutettavaksi mös siten, että pisteet psvät paikoillaan, mutta koordinaatisto muuttuu (ks. kuva 13). Silloin on ksms muunnoksen passiivisesta tulkinnasta. Ottakaamme esimerkki television katselemisesta. Jos katsoja jostain sstä haluaa katsella televisiota lösalaisin, hän voi kääntää vastaanottimen lösalaisin. Vaikutus on kuitenkin sama, jos televisio jää oikein päin ja katsoja itse käänt lösalaisin käsilläseisontaan. Ensimmäisessä tilanteessa on kse aktiivisesta muunnoksesta, jälkimmäisessä passiivisesta vaikkakin jälkimmäinen tapa katsella televisiota vaatinee enemmän ponnistelua. 1 Televisioesimerkissä koordinaatiston ajatellaan olevan sidottu katsojaan ja liikkuvan hänen mukanaan. 1 Tämän kirjoittaja on päätnt siihen lopputulokseen, että televisiota ei kannata katsella lainkaan.
19 P P Kuva 13. Vanhan pisteen P koordinaatit uudessa -koordinaatistossa (passiivinen tulkinta) ovat samat kuin uuden pisteen P koordinaatit vanhassa -koordinaatistossa (aktiivinen tulkinta). Pisteen siirto johtaa siis samaan lopputulokseen kuin koordinaatiston htä pitkä vastakkaissuuntainen siirto. Koordinaatiston muuntaminen tarkoittaa sitä, että muunnos kohdistetaan origoon ja kantavektoreihin. Affiinissa muunnoksessa (1) kantavektoreita muutetaan lineaarisella osalla AX ja origoa siirrolla S. Kantavektorien i, j ja k matriisiesitkset ovat I = 1 0 0, J = 0 1 0 ja K = 0 0 1 Lineaarisessa muunnoksessa X = AX = a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33
20 8 AKTIIVISET JA PASSIIVISET MUUNNOKSET kantavektorit muuntuvat muotoon I = AI = J = AJ = K = AK = Muunnetut kantavektorit ovat siis a 11 a 21 a 31 a 12 a 22 a 32 a 13 a 23 a 33 = a 11 I + a 21 J + a 31 K = a 12 I + a 22 J + a 32 K = a 13 I + a 23 J + a 33 K. i = a 11 i + a 21 j + a 31 k j = a 12 i + a 22 j + a 32 k k = a 13 i + a 23 j + a 33 k. Olkoon pisteen (,, ) paikkavektori r = i+ j+ k muunnettujen kantavektorien avulla lausuttuna r = i + ỹ j + k. Kertoimien, ỹ ja lausekkeet selvitetään seuraavasti: r = i + ỹ j + k = (a 11 i + a 21 j + a 31 k) +ỹ(a 12 i + a 22 j + a 32 k) + (a 13 i + a 23 j + a 33 k) = (a 11 + a 12 ỹ + a 13 ) i + (a 21 + a 22 ỹ + a 23 ) j + (a 31 + a 32 ỹ + a 33 ) k. Esits kantavektorien avulla on ksikäsitteinen, joten = a 11 + a 12 ỹ + a 13 = a 21 + a 22 ỹ + a 23 = a 31 + a 32 ỹ + a 33 eli = a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ỹ X = A X X = A 1 X. Täten pisteen koordinaatit (, ỹ, ) uudessa koordinaatistossa eli pstvektori X = [, ỹ, ] T saadaan vanhoista koordinaateista (,, ) kertomalla vektori X = [,, ] T matriisin A käänteismatriisilla A 1. Siirtotermillä S ei muuteta kantavektoreita (vektorilla ei ole paikkaa) vaan ainoastaan origoa kuvasta 13 ilmenevällä tavalla. Yhteenveto: avaruuden kantavektoreihin kohdistuvalla muunnoksella X = AX (31)
21 on sama vaikutus kuin avaruuden pisteisiin kohdistuvalla muunnoksella X = A 1 X. (32) Origon siirrolla paikkaan S on sama vaikutus kuin pisteisiin kohdistuvalla muunnoksella X = X S. (33) Aktiivisen muunnoksen (31) ja passiivisen muunnoksen (32) muunnosmatriisit ovat toistensa käänteismatriiseja, ja siirtovektorit ovat toistensa vastavektoreita. Esimerkki 1 Otetaan avaruuden uudeksi kannaksi vektorit i = 1 2 i + 1 2 j 1 2 k j = 1 2 i + 1 2 j + 1 2 k k = 1 2 i 1 2 j + 1 2 k ja siirretään origo pisteeseen (2, 3, 1). Silloin kantavektoreita on muunnettu matriisilla A = 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 Huomaa kerrointaulukoiden transponointi! Jotta muunnos vanhasta koordinaatistosta uuteen onnistuisi, matriisille A pitää etsiä käänteismatriisi. Matriisilaskennan tunnetuilla menetelmillä saadaan 1 1 0 A 1 = 0 1 1 1 0 1 Asia voidaan tarkistaa matriisikertolaskulla: 1/2 1/2 1/2 1 1 0 1/2 1/2 1/2 0 1 1 1/2 1/2 1/2 1 0 1 = 1 0 0 0 1 0 0 0 1 Matriisi A 1 on vanhan tutun muunnoksen f(,, ) = ( +, +, + ) matriisi. Pisteen (,, ) koordinaatit uudessa kannassa ovat htälöiden (32) ja (33) mukaan ỹ = = 1 1 0 0 1 1 1 0 1 1 1 0 0 1 1 1 0 1 2 3 + 1 = 2 3 1 + 5 + 2 + 1
22 8 AKTIIVISET JA PASSIIVISET MUUNNOKSET Tarkistetaan, pitääkö tämä paikkansa: Näin ollen i + ỹ j + k = ( + 5) i + ( + 2) j + ( + 1) k = ( + 5)( 1 2 i + 1 2 j 1 2 k) + ( + 2)( 1 2 i + 1 2 j + 1 2 k) +( + 1)( 1 2 i 1 2 j + 1 2 k) = [( + 5) ( + 2) + ( + 1)] 1 2 i +[( + 5) + ( + 2) ( + 1)] 1 2 j +[ ( + 5) + ( + 2) + ( + 1)] 1 2 k = (2 4) 1 2 i + (2 6) 1 2 j + (2 + 2) 1 2 k = i + j + k 2 i 3 j + k. ỹ joten asiat ovat kunnossa. = 2 3 1 X = X S, 8.1 Muunnosten hdistäminen Kun muunnoksen muuttamaa avaruutta muutetaan välittömästi toisella muunnoksella, kseessä on muunnosten hdistäminen. Se vastaa perusmatematiikan hdistettä funktiota. Esimerkki 2 Kiertäköön muunnos A avaruuden pisteitä -akselin mpäri kulman π/3 verran ja olkoon B peilaus -tason suhteen. Muunnosmatriiseille saadaan htälöistä (21) ja (29) esitkset A = 1/2 3/2 0 3/2 1/2 0 ja B = 0 0 1 1 0 0 0 1 0 0 0 1 Kun pistettä (,, ) ensin kierretään ja sitten peilataan, tapahtuu seuraavaa: A B 1/2 3/2 0 3/2 1/2 0 = 0 0 1 1 1 0 0 + 3 2 2 0 1 0 3 + 1 = 2 2 0 0 1 1 + 3 2 2 3 + 1 2 2 1 3 2 2 3 + 1 2 2
8.1 Muunnosten hdistäminen 23 Ensimmäisessä vaiheessa laskettiin X = AX ja toisessa vaiheessa X = BX. Siis X = BX = B(AX) = (BA)X, joten hdistett operaatio on lineaarinen, ja sen matriisi on matriisitulo BA: (BA)X = = 1 0 0 0 1 0 0 0 1 1/2 3/2 0 3/2 1/2 0 0 0 1 1/2 3/2 0 3/2 1/2 0 0 0 1 = 1 2 3 3 2 + 1 2 2 Kun päinvastoin ensin peilataan ja sen jälkeen kierretään, piste (,, ) muuttuu näin: B A 1 0 0 0 1 0 0 0 1 = 1/2 3/2 0 3/2 1/2 0 0 0 1 = 1 2 + 3 3 2 2 + 1 2 Tässä operoitiin ensin matriisilla B ja sitten matriisilla A, joten hdistetn operaation matriisi on tulo AB: (AB)X = = 1/2 3/2 0 3/2 1/2 0 0 0 1 1/2 3/2 0 3/2 1/2 0 0 0 1 1 0 0 0 1 0 0 0 1 = 1 2 + 3 3 2 2 + 1 2 Esimerkistä nähdään, että kahdesta lineaarisesta muunnoksesta hdistett muunnos on lineaarinen, ja sen matriisi on muunnosmatriisien tulo (ks. kuva 14). Sama koskee useamman muunnoksen hdistämistä. Lisäksi lopputulos riippuu siitä, missä järjestksessä muunnokset hdistetään (ks. kuva 15).
24 8 AKTIIVISET JA PASSIIVISET MUUNNOKSET X A AX B BAX BA Kuva 14. Muunnoksista A ja B hdistett muunnos BA. AX X ABX BAX BX Kuva 15. Muunnoksista A ja B hdistettjen muunnosten AB ja BA vaikutus pisteeseen X. Muunnos A on kierto -akselin mpäri kulman π/3 verran ja B on peilaus -tason suhteen. Kuvassa -akselin ajatellaan osoittavan kohtisuoraan katsojaa kohti.
25 Edellä tarkasteltiin muunnosta aktiivisesta näkökulmasta. Aktiivista muunnosta BA vastaa passiivinen muunnos (BA) 1. Matriisilaskennan teorian mukaan tulon käänteismatriisi on käänteismatriisien tulo, mutta päinvastaisessa järjestksessä! Siis (BA) 1 = A 1 B 1. Useammasta muunnoksesta hdistettä aktiivista muunnosta A n A n 1... A 2 A 1 vastaa passiivinen muunnos (A n A n 1... A 2 A 1 ) 1 = A 1 1 A 1 2... A 1 n 1A 1 n. Passiiviset muunnokset hdistetään päinvastaisessa järjestksessä kuin aktiiviset muunnokset. 9 Affiinit muunnosmatriisit Avaruuden koordinaatiston tuntemiseksi riittää tuntea kantavektorit i, j ja k sekä origo O. Vektoreiden esittäminen koordinaattien avulla ei edelltä tietoa origon sijainnista, sillä vektori ei ole paikkaan sidottu. Avaruuden pisteillä sen sijaan on tiett sijainti, ja pisteen koordinaattien tunteminen vaatii origon paikan kiinnittämisen. Muodollisesti pisteet voidaan esittää summina i + j + k + 1O missä origo on mukana kertoimella 1. Vektorin lausekkeessa origon voidaan ajatella olevan mukana kertoimella 0: i + j + k = i + j + k + 0O. Summissa i+ j+ k+to kertoimet,, ja t määräävät ksikäsitteisesti, mistä vektorista tai pisteestä on ksms, joten merkinnöissä on turhaa raahata mukana kantavektoreita ja origoa. Siispä pisteet ja vektorit voidaan esittää ksikäsitteisesti 4 1 -pstvektoreina [ t ] T = Ne käsitetään kolmiulotteisen avaruuden pisteiksi, kun t = 1, ja vektoreiksi, kun t = 0. Puhumme siis pisteistä [ 1 ] T [ ] T ja vektoreista 0. Koska 1 2 λ 1 1 + λ 2 2 λ 1 1 1 + λ 2 2 2 = λ 1 1 + λ 2 2 λ 1 1 + λ 2 2, 0 0 0 vektorit säilvät vektoreina, kun niitä lasketaan hteen skalaareilla kerrottuina. Tällaisia summia kutsutaan lineaarikombinaatioiksi. Kahden pisteen lineaarikombinaatio 1 2 λ 1 1 + λ 2 2 λ 1 1 1 + λ 2 2 2 = λ 1 1 + λ 2 2 λ 1 1 + λ 2 2 1 1 λ 1 + λ 2 t
26 9 AFFIINIT MUUNNOSMATRIISIT on piste vain, kun λ 1 + λ 2 = 1. Jos merkitään X 1 = [ 1 1 1 1 ] T ja X 2 = [ 2 2 2 1 ] T, lineaarikombinaatio saa muodon λ 1 X 1 + λ 2 X 2. Tapauksessa λ 1 + λ 2 = 1 se voidaan kirjoittaa (1 λ 2 )X 1 + λ 2 X 2 = X 1 + λ 2 (X 2 X 1 ). Tästä muodosta nähdään parametrin λ 2 geometrinen merkits: kun sen arvoa muutetaan, piste X 1 + λ 2 (X 2 X 1 ) liikkuu pitkin pisteitä X 1 ja X 2 hdistävää suoraa (ks. kuva 16). Jos λ 1 + λ 2 = 0, summa λ 1 X 1 + λ 2 X 2 on vektori. Muodosta λ 2 X 1 + λ 2 X 2 = λ 2 (X 2 X 1 ) nähdään, että kseessä on pisteiden X 2 ja X 1 paikkavektorien erotus vakiolla λ 2 kerrottuna. 2 3 1 X 2 3 2 1 2 0 X 1 Kuva 16. Pisteen X 1 + λ(x 2 X 1 ) sijainti parametrin λ eri arvoilla. Siirron erikoisasema on hienoinen kauneusvirhe edellä esitetssä affiinimuunnosten teoriassa. Epäkohta poistuu, kun muunnokset esitetään 3 3 -matriisien sijaan eritistä tppiä olevina 4 4 -matriiseina. Niitä kutsutaan affiineiksi matriiseiksi, ja ne ovat leistä muotoa A = a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 0 0 0 1 Ne ovat käteviä siinäkin mielessä, että ne säilttävät pisteet pisteinä ja vektorit vektoreina: a 11 a 12 a 13 a 14 a 11 + a 12 + a 13 + a 14 t a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 = a 21 + a 22 + a 23 + a 24 t a 31 + a 32 + a 33 + a 34 t (34) 0 0 0 1 t t
27 On vaivatonta osoittaa, että kahden affiinimatriisin tulo on affiinimatriisi, ja affiinimatriisin käänteismatriisi on affiini. Sen sijaan affiinimatriisien summa ja erotus eivät leensä ole affiineja. Tavallisesti mös affiinimatriisin kertominen skalaarilla ja transponointi johtavat matriisiin, joka ei ole affiini. Jos htälössä (34) on t = 0 eli kseessä on vektorin kertominen affiinilla matriisilla, lopputulos on a 11 + a 12 + a 13 a 21 + a 22 + a 23 a 31 + a 32 + a 33 0 Kolme lintä riviä ovat tulos laskutoimituksesta a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 Tämä esittää tavallista kolmiulotteisen avaruuden lineaarimuunnosta, joka voisi olla esimerkiksi peilaus tai kierto. Matriisialkioilla a 14, a 24 ja a 34 ei ole mitään merkitstä. Tapauksessa t = 1 piste kerrotaan affiinilla matriisilla, ja lopputulos on hiukan monimutkaisempi: a 11 + a 12 + a 13 + a 14 a 21 + a 22 + a 23 + a 24 a 31 + a 32 + a 33 + a 34 1 Kolme lintä riviä voidaan nt kirjoittaa muotoon a 11 a 12 a 13 a 21 a 22 a 23 + a 31 a 32 a 33 Havaitaan, että tässä operoidaan vektoriin [ ] T kolmiulotteisen avaruuden lineaarimuunnoksella, ja sen jälkeen siirretään muunnettua vektoria vektorin [ a 14 a 24 a 34 ] T verran. Toisin sanoen samaan affiinimatriisiin voidaan kätkeä sekä lineaarimuunnos että siirto, ja siirron erikoisasema affiinimuunnosten teoriassa on poistunut. Tästä lähtien siirtokin voidaan tehdä matriisikertolaskuna. Avaruuden leinen affiini muunnos (1) on affiinimatriisin avulla kirjoitettuna t = a 11 a 12 a 13 s a 21 a 22 a 23 s a 31 a 32 a 33 s 0 0 0 1 a 14 a 24 a 34 t (35) Tässä matriisit on selvden vuoksi lohkottu merkitkseltään erilaisiin lohkoihin. Lohko a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33
28 10 MATRIISIPINO on kolmiulotteisen avaruuden lineaarimuunnos, kuten esimerkiksi vents, viistoutus, peilaus, projektio tai kierto. Lohko [ s s s ] T edustaa siirtoa, ja t = 0 tai t = 1 sen mukaan, muunnetaanko vektoria vai pistettä. Vektoriin siirto-osa ei vaikuta lainkaan. Pisteeseen se vaikuttaa siinä järjestksessä, että siirto tehdään lineaarisen transformaation jälkeen. Jos siirto halutaan tehdä ennen lineaarimuunnosta, järjestel on seuraava: 1 = a 11 a 12 a 13 0 a 21 a 22 a 23 0 a 31 a 32 a 33 0 0 0 0 1 1 0 0 s 0 1 0 s 0 0 1 s 0 0 0 1 1 10 Matriisipino Auringon halkaisija on 1 392 000 km. Sitä kiertää kahdeksan 2 planeettaa, joista kaksi on Maa eli Tellus (halkaisija 12 700 km) ja Mars (halkaisija 6 770 km). Marsilla on kaksi kuuta, Phobos (halkaisija 23 km) ja Deimos (halkaisija 13 km). Maalla on ksi kuu, Kuu (halkaisija 3 480 km). Kuun rata Aurinkoon sidotussa koordinaatistossa on turhan monimutkainen. Siksi on järkevää tarkastella Kuun kulkua Maan koordinaatistossa, jossa Kuun rata on ellipsin muotoinen. Olkoon tehtävänä nimeltä mainitut kuusi taivaankappaletta käsittävän miniaurinkokunnan tietokonemallin rakentaminen. Taivaankappaleet esitetään erisuuruisina palloina. Mittasuhteet on stä vääristää sellaisiksi, että kaikki pallot voidaan nähdä kuvaruudulla samanaikaisesti. Niiden paikat ja asennot päivitetään määrävälein sanokaamme sekunnin sadasosan välein. Seuraava algoritmi eli toimintaohjesarja kuvaa hden tällaisen päivitksen kulun: A1. Sijoita Aurinko koordinaatiston origoon. A2. Laske Maan uusi paikka Auringon koordinaatistossa ja siirrä koordinaatiston origo sinne. A3. Sijoita Maa koordinaatiston origoon. A4. Laske Kuun uusi paikka Maan koordinaatistossa ja siirrä koordinaatiston origo sinne. A5. Sijoita Kuu koordinaatiston origoon. A6. Palaa edelliseen koordinaatistoon (so. Maan koordinaatistoon). A7. Palaa edelliseen koordinaatistoon (so. Auringon koordinaatistoon). A8. Laske Marsin uusi paikka Auringon koordinaatistossa ja siirrä koordinaatiston origo sinne. A9. Sijoita Mars koordinaatiston origoon. 2 Tähtitieteilijät peruuttivat Plutolta planeetan tittelin v. 2006.
29 A10. Laske Phobosin uusi paikka Marsin koordinaatistossa ja siirrä koordinaatiston origo sinne. A11. Sijoita Phobos koordinaatiston origoon. A12. Palaa edelliseen koordinaatistoon (so. Marsin koordinaatistoon). A13. Laske Deimosin uusi paikka Marsin koordinaatistossa ja siirrä koordinaatiston origo sinne. A14. Sijoita Deimos koordinaatiston origoon. A15. Palaa edelliseen koordinaatistoon (so. Marsin koordinaatistoon). A16. Palaa edelliseen koordinaatistoon (so. Aurinon koordinaatistoon). Algoritmissa esiint vain ksi sellainen komento, jossa malliin lisätään uusi geometrinen olio. Tämä komento on origokeskisen pallon lisääminen. Itse asiassa riittää, jos psttään konstruoimaan origokeskinen ksisäteinen pallo, sillä muun kokoiset pallot psttään tällöin luomaan venttämällä tai kutistamalla koordinaatteja. Merkillepantavaa edellisessä toimintaohjesarjassa on palaaminen aikaisempaan koordinaatistoon. Vanhan koordinaatiston tät siis olla talletettuna jonnekin. Silicon Graphicsissa (SGI) kehitett, kolmiulotteiseen tietokonegrafiikkaan tarkoitettu OpenGL-funktiokirjasto tallettaa koordinaatistot, tai oikeammin sanottuna koordinaatteja muuttavat (siis passiiviset) transformaatiot, pinoon tietokoneen muistiin. Transformaatiot talletetaan affiineina 4 4 -matriiseina. Pinon päällimmäistä matriisia kutsutaan tässä aktuelliksi matriisiksi (engl. current matri) sen takia, että kaikki grafiikkakomennot toteutetaan sen määräämässä koordinaatistossa. Aktuellia matriisia voidaan muuttaa korvaamalla se ksikkömatriisilla (komento glloadidentit()) tai kertomalla se oikealta puolelta affiinilla muunnosmatriisilla (komennot glrotate(θ,,, ), gltranslate(,, ) ja glscale(,, )). Matriisin kertominen toisella matriisilla merkitsee muunnosten hdistämistä, kuten aikaisemmin todettiin. Koska OpenGL:ssä muunnetaan koordinaatistoja eikä itse avaruutta ja sen pisteitä, on kse passiivisista muunnoksista. Niiden htedessä matriisitulon vasemmanpuoleista matriisia vastaava koordinaattimuunnos suoritetaan ennen oikeanpuoleista. Jos siis halutaan jo muunnettua koordinaatistoa muuntaa edelleen, vanha muunnosmatriisi pitää kertoa nimenomaan oikealta puolelta uuden muunnoksen matriisilla. Vanhan muunnosmatriisin tallettaminen pinoon tehdään push-operaatiolla (komento glpushmatri()). Siinä pinoa tönnetään ksi porras alaspäin, ja päällimmäiseksi jätetään aktiivisen matriisin kopio. Välittömästi push-operaation jälkeen pinon kaksi päällimmäistä matriisia ovat samat. Pop-operaatio (komento glpopmatri()) puolestaan nostaa pinoa hden portaan löspäin, jolloin aikaisemman pinon päällimmäisin matriisi lentää taivaan tuuliin. Seuraavaksi otetaan askel kohti OpenGL-koodia ja kirjoitetaan
30 10 MATRIISIPINO algoritmi kättäen edellä suluissa esiteltjä OpenGL-komentoja. A1. glloadidentit(), sijoita Aurinko koordinaatiston origoon. A2. Laske Maan uusi paikka ( T, T, T ) Auringon koordinaatistossa, glpushmatri(), gltranslate( T, T, T ). A3. Sijoita Maa koordinaatiston origoon. A4. Laske Kuun uusi paikka ( K, K, K ) Maan koordinaatistossa, glpushmatri(), gltranslate( K, K, K ). A5. Sijoita Kuu koordinaatiston origoon. A6. glpopmatri(). A7. glpopmatri(). A8. Laske Marsin uusi paikka ( M, M, M ) Auringon koordinaatistossa, glpushmatri(), gltranslate( M, M, M ). A9. Sijoita Mars koordinaatiston origoon. A10. Laske Phobosin uusi paikka ( P, P, P ) Marsin koordinaatistossa, glpushmatri(), gltranslate( P, P, P ). A11. Sijoita Phobos koordinaatiston origoon. A12. glpopmatri(). A13. Laske Deimosin uusi paikka ( D, D, D ) Marsin koordinaatistossa, glpushmatri(), gltranslate( D, D, D ). A14. Sijoita Deimos koordinaatiston origoon. A15. glpopmatri(). A16. glpopmatri(). Olkoon T sen koordinaattimuunnoksen matriisi, jolla päästään Auringon koordinaatistosta Maan eli Telluksen koordinaatistoon. Matriisit K, M, P ja D määritellään vastaavasti algoritmissa esiintvistä alaindekseistä ilmenevällä tavalla. Alla on esitett matriisipinon tila kunkin vaiheen suorituksen jälkeen: A1 A2 A3 A4 A5 A6 A7 A8 I T T T K T K T I M I I T T I I I I A9 A10 A11 A12 A13 A14 A15 A16 M MP MP M MD MD M I I M M I M M I I I I I Kuvassa 17 on havainnollistettu taivaankappaleisiin sidottuja koordinaatistoja.
Kuva 17. Köhän miehen aurinkokunta. 31