Vektorimatematiikkaa Pisteet ja vektorit



Samankaltaiset tiedostot
Tekijä Pitkä matematiikka Suoran pisteitä ovat esimerkiksi ( 5, 2), ( 2,1), (1, 0), (4, 1) ja ( 11, 4).

Ota tämä paperi mukaan, merkkaa siihen omat vastauksesi ja tarkista oikeat vastaukset klo 11:30 jälkeen osoitteesta

Suorat ja tasot, L6. Suuntajana. Suora xy-tasossa. Suora xyzkoordinaatistossa. Taso xyzkoordinaatistossa. Tason koordinaattimuotoinen yhtälö.

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

Suora. Määritelmä. Oletetaan, että n = 2 tai n = 3. Avaruuden R n suora on joukko. { p + t v t R},

Taso 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste, suora

Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä:

T Vuorovaikutteinen tietokonegrafiikka Tentti

Suora 1/5 Sisältö ESITIEDOT: vektori, koordinaatistot, piste

Tekijä Pitkä matematiikka Poistetaan yhtälöparista muuttuja s ja ratkaistaan muuttuja r.

2 Pistejoukko koordinaatistossa

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

Suorista ja tasoista LaMa 1 syksyllä 2009

1 2 x2 + 1 dx. (2p) x + 2dx. Kummankin integraalin laskeminen oikein (vastaukset 12 ja 20 ) antaa erikseen (2p) (integraalifunktiot

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016

Pythagoraan polku

Tyyppi metalli puu lasi työ I II III

Matriisit ja vektorit Matriisin käsite Matriisialgebra. Olkoon A = , B = Laske A + B, , 1 3 3

Juuri 4 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Kertaus. b) B = (3, 0, 5) K2. 8 ( 1)

Lineaarialgebra MATH.1040 / voima

Kertausta: avaruuden R n vektoreiden pistetulo

Matikkapaja keskiviikkoisin klo Lineaarialgebra (muut ko) p. 1/81

c) Määritä paraabelin yhtälö, kun tiedetään, että sen huippu on y-akselilla korkeudella 6 ja sen nollakohdat ovat x-akselin kohdissa x=-2 ja x=2.

1.1 Vektorit. MS-A0007 Matriisilaskenta. 1.1 Vektorit. 1.1 Vektorit. Reaalinen n-ulotteinen avaruus on joukko. x 1. R n. 1. Vektorit ja kompleksiluvut

Ortogonaalinen ja ortonormaali kanta

DYNAMIIKKA II, LUENTO 5 (SYKSY 2015) Arttu Polojärvi

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Matematiikan tukikurssi

VEKTORIT paikkavektori OA

Insinöörimatematiikka D

w + x + y + z =4, wx + wy + wz + xy + xz + yz =2, wxy + wxz + wyz + xyz = 4, wxyz = 1.

3 Suorat ja tasot. 3.1 Suora. Tässä luvussa käsitellään avaruuksien R 2 ja R 3 suoria ja tasoja vektoreiden näkökulmasta.

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Matematiikan tukikurssi

Vektorit, suorat ja tasot

Insinöörimatematiikka D

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Avaruuden kolme sellaista pistettä, jotka eivät sijaitse samalla suoralla, määräävät

Talousmatematiikan perusteet: Luento 9. Matriisien peruskäsitteet Yksinkertaiset laskutoimitukset Transponointi Matriisitulo

Muodonmuutostila hum

Tekijä Pitkä matematiikka

Talousmatematiikan perusteet: Luento 9

Insinöörimatematiikka D

1 Kompleksiluvut 1. y z = (x, y) Kuva 1: Euklidinen taso R 2

Lineaariavaruudet. Span. Sisätulo. Normi. Matriisinormit. Matriisinormit. aiheita. Aiheet. Reaalinen lineaariavaruus. Span. Sisätulo.

3.1 Lineaarikuvaukset. MS-A0004/A0006 Matriisilaskenta. 3.1 Lineaarikuvaukset. 3.1 Lineaarikuvaukset

3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset. 3.2 Matriisien laskutoimitukset

Geometriset avaruudet Pisteavaruus, vektoriavaruus ja koordinaattiavaruus

Luento 3: 3D katselu. Sisältö

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Suorien ja tasojen geometriaa Suorien ja tasojen yhtälöt

Lineaarialgebra ja matriisilaskenta I. LM1, Kesä /218

Vektorialgebra 1/5 Sisältö ESITIEDOT: vektori

Koordinaatistot 1/6 Sisältö ESITIEDOT: reaaliluvut

2 Yhtälöitä ja epäyhtälöitä

Kahden suoran leikkauspiste ja välinen kulma (suoraparvia)

Juuri 4 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Kertaus. b) B = (3, 0, 5) K2. ( )

Insinöörimatematiikka D, laskuharjoituksien esimerkkiratkaisut

Matikkapaja keskiviikkoisin klo Lineaarialgebra (muut ko) p. 1/210

Luento 7: 3D katselu. Sisältö

Yleiset lineaarimuunnokset

Talousmatematiikan perusteet: Luento 8. Vektoreista ja matriiseista Vektorien peruslaskutoimitukset Lineaarinen riippumattomuus Vektorien sisätulo

Matriisialgebra harjoitukset, syksy 2016

Tekijä Pitkä matematiikka b) Kuvasta nähdään, että b = i 4 j. c) Käytetään a- ja b-kohtien tuloksia ja muokataan lauseketta.

Preliminäärikoe Tehtävät Pitkä matematiikka / 3

KJR-C1001 Statiikka ja dynamiikka. Luento Susanna Hurme

Aaltojen heijastuminen ja taittuminen

Insinöörimatematiikka D

9 Matriisit. 9.1 Matriisien laskutoimituksia

Toisen asteen käyrien ja pintojen geometriaa Ympyrän ja pallon ominaisuuksia

1. Olkoot vektorit a, b ja c seuraavasti määritelty: a) Määritä vektori. sekä laske sen pituus.

y=-3x+2 y=2x-3 y=3x+2 x = = 6

3 Yhtälöryhmä ja pistetulo

Pinta-alojen ja tilavuuksien laskeminen 1/6 Sisältö ESITIEDOT: määrätty integraali

Vektoreiden A = (A1, A 2, A 3 ) ja B = (B1, B 2, B 3 ) pistetulo on. Edellisestä seuraa

Neliömatriisi A on ortogonaalinen (eli ortogonaalimatriisi), jos sen alkiot ovat reaalisia ja

Kertausta: avaruuden R n vektoreiden pistetulo

Johdatus tekoälyn taustalla olevaan matematiikkaan

A-osio. Tehdään ilman laskinta ja taulukkokirjaa! Valitse tehtävistä A1-A3 kaksi ja vastaa niihin. Maksimissaan tunti aikaa suorittaa A-osiota.

Luento 8: Epälineaarinen optimointi

Pyramidi 4 Analyyttinen geometria tehtävien ratkaisut sivu 180 Päivitetty Pyramidi 4 Luku Ensimmäinen julkaistu versio

Juuri Kertaus Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

Lineaarinen yhtälöryhmä

MAT Algebra I (s) periodilla IV 2012 Esko Turunen

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47

y z = (x, y) Kuva 1: Euklidinen taso R 2

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Aaltojen heijastuminen ja taittuminen

Lineaarialgebra (muut ko)

9. Lineaaristen differentiaaliyhtälöiden ratkaisuavaruuksista

! 7! = N! x 8. x x 4 x + 1 = 6.

LAUSEKKEET JA NIIDEN MUUNTAMINEN

1 Ominaisarvot ja ominaisvektorit

Transkriptio:

Geometriaa

Vektorimatematiikkaa Pisteet ja vektorit Käytössä vektoriavaruus R 3 Merkitsemme pistettä p = x y z voidaan tilanteen mukaan esittää sekä pysty- että vaakavektorina (1 3 tai 3 1-matriisina) Kaksi pistettä p = x y, q = z x y z määrittelevät (suunta)vektorin pq = x x y y z z vektorilla on suunta ja pituus 1

vektori ei kuitenkaan liity erityisesti em. pisteisiin, ts. sillä ei ole paikkaa Pisteet ja vektorit käsitellään saman vektoriavaruuden R 3 alkioina Piste p voidaan tulkita vektoriksi 0p = p, missä 0 = [0, 0, 0] on origo ts. pisteen voi ajatella paikan suuntavektoriksi origosta katsottuna 2

Vektorioperaatioita Vektoreiden yhteen- ja vähennyslasku suoritetaan komponenteittain, kuten myös kertominen reaaliluvulla Vektorin p vastavektori on p Vektorin (euklidinen) pituus: p = x 2 + y 2 + z 2 Vektori p on normalisoitu, jos p = 1 vektori normalisoidaan jakamalla se pituudellaan: n = p p 3

Suorat, säteet ja segmentit Kahden eri pisteen p ja q kautta kulkevan suoran pisteet x toteuttavat yhtälön x = p + t( pq) parametrin t R jollakin arvolla Vektori pq on suoran suuntavektori Säde määritellään muuten kuten suora, mutta parametrilta vaaditaan t 0 säde on ääretön vain toiseen suuntaan Segmentissä pq rajataan parametria t vielä enemmän vaatimuksella t [0, 1] p ja q ovat segmentin päätepisteet 4

Pistetulo Kahden n-ulotteisen vektorin p ja q pistetulo on reaaliluku, joka lasketaan kertomalla komponentit keskenään ja summaamalla tulokset p q = xx + yy + zz vaihdannaisuus p q = q p pätee Tulkinta pistetulolle: p q = p q cos(θ) missä θ on vektoreiden välinen kulma vektorit kohtisuorassa, kun p q = 0 Jos q = 1, graafinen tulkinta vektorin p projektion pituutena vektorille q jos p q < 0, projektio negatiivinen Vektorin p pituus: p p = p 2 Demo http://www.cs.brown.edu/exploratories/freesoftware/repository/edu/brown/cs/ exploratories/applets/dotproduct/dot product guide.html 5

Ristitulo Kolmiulotteisen avaruuden operaatio, joka tuottaa kahdesta vektorista p ja q uuden vektorin r = p q laskukaavalla r = yz zy zx xz xy yx Vektori r on kohtisuorassa molempien vektoreiden p ja q kanssa Vektorin r suunta oikean käden säännöstä (peukalo p, etusormi q, keskisormi r ) p q = ( q p ) Geometrinen tulkinta: r on vektoreiden p ja q muodostaman vinoneliön pinta-ala Demo http://physics.syr.edu/courses/java-suite/crosspro.html 6

Kaksiulotteinen ristitulo Olkoon R 2 -pisteet p = [x, y] sekä q = [x, y ] voidaan myös tulkita R 3 -pisteiksi joiden z-koordinaatti nolla Nyt 2D-ristitulo p q on reaaliluku r = xy yx tämä on itse asiassa 3D-ristitulon z-koordinaatti em. tulkinnassa Ristitulo r on positiivinen, kun p sijaitsee myötäpäivään pisteestä q origon suhteen Tärkeä sovellus: jos vedetään segmentti pisteestä p pisteeseen q, ja siitä edelleen segmentti pisteeseen r, käännytäänkö pisteessä q oikealle vai vasemmalle? käännös tehdään oikealle, jos (r p) (q p) > 0 (vasemmalle jos < 0, suoraan jos = 0) 7

ei tarvita trigonometriaa liukuluvuilla 8

Sovellus: 2D-segmenttien leikkaus Kysymys: leikkaako kaksiulotteisen avaruuden pisteiden p ja q virittämä segmentti pq pisteiden r ja s virittämän segmentin rs? Ensimmäinen yritys algoritmiksi: 1. tulkitaan segmentit äärettömiksi suoriksi 2. lasketaan suorien leikkauspiste x analyyttisesti 3. ratkaistaan parametrit t ja t, joilla piste x toteuttaa suorien yhtälöt: segmentit leikkaavat, jos t,t [0,1] Huonot puolet: laskenta on raskasta ja herkkää pyöristysvirheille Algoritmi ei toimi ollenkaan, jos toinen segmentti on yksittäinen piste Kaksivaiheinen parempi algoritmi saadaan rajauslaatikoita ja edellistä 2D-ristituloa hyödyntämällä Jos p=[x, y] ja q=[x, y ], niin segmentin pq rajauslaatikon vasen alanurkka on pisteessä [min(x,x ), min(y,y )] 9

ja oikea ylänurkka pisteessä [max(x,x ), max(y, y )] Quick rejection: ensimmäisessä vaiheessa tutkitaan, leikkaavatko segmenttien rajauslaatikot toisensa (välttämätöntä segmenttien leikkaukselle) Rajauslaatikot leikkaavat toisensa jos ja vain jos niiden projektiot pääakseleille leikkaavat kaikissa ulottuvuuksissa y s r q p x 10

Toisessa vaiheessa tarkistetaan, että segmentit todella leikkaavat toisensa Jos segmentit leikkaavat, toisen segmentin päätepisteet ovat ensimmäisen segmentin virittämän äärettömän suoran eri puolilla, ja päinvastoin Siis pq leikkaa rs:n täsmälleen silloin kun r ja s ovat pq:n virittämän suoran eri puolilla, ja päinvastoin tutkitaan, että käännös kuljettaessa p q r on eri suuntaan kuin kuljettaessa p q s näin on tarkalleen silloin, jos käännösten suunnan ilmoittavat 2D-ristitulot (r p) (q p) (s p) (q p) eivät ole molemmat positiivisia tai molemmat negatiivisia sitten sama testi tehdään toisen segmentin näkökulmasta 11

Tasot ja tasojen normaalit Kaksi kolmiulotteisen avaruuden vektoria p ja q, jotka eivät ole yhdensuuntaisia, määrittelevät pisteen r kautta kulkevan kaksiulotteisen äärettömän tason tason pisteet x toteuttavat yhtälön x = r + u p + v q parametrien u ja v joillekin reaaliarvoille Vektorit p ja q ovat tason suuntavektorit (eivät yksikäsitteisiä) Tason normaali N = p q yksikäsitteinen suunnan, mutta ei pituuden suhteen normalisoitu normaali: n = N N Normaali yhdessä minkä tahansa tason pisteen kanssa riittää määrittelemään tason yksikäsitteisesti 12

Vaihtoehtoinen esitystapa tasolle Tasoon kuuluvat selvästi ne pisteet, joiden erotusvektori annetusta tason pisteestä r on kohtisuorassa normaaliin nähden: (x r) N = 0 x N r N = 0 (1) Kun merkitään N = [A, B, C] joillekin vakioille A,B,C R, ja lisäksi merkitään D = r N, saadaan uusi yhtälö tason pisteille: x y z A B + D = 0 C Ax + By + Cz + D = 0 (2) Jos tunnetaan tason normaali ja jokin tason piste, voidaan D ratkaista sijoittamalla pisteen koordinaatit x, y, z em. yhtälöön 13

Yhtälöstä (1) saadaan vielä hyödyllinen versio: x N = r N Jos oletetaan että N on normalisoitu, r N on r:n projektio normaalin suunnassa, joka taas on selvästi tason etäisyys origosta siis tasoon kuuluvat ne pisteet x, joiden projektio normaalin suunnassa on tämä etäisyys Jos normaali ei ole valmiiksi normalisoitu, jaetaan vielä sen pituudella tason etäisyys origosta on r N N = D N Jonkin avaruuden pisteen etäisyys tasosta on tietenkin sen etäisyys normaalin suunnassa, joten tästä saadaan edelleen mielivaltaisen avaruuden pisteen p = [x, y, z] etäisyydeksi tasosta 14

d = p = = N N ( D N ) Ax + By + Cz + D N Ax + By + Cz + D A2 + B 2 + C 2 Vielä kertauksena, taso voidaan määrittää antamalla jokin tason piste ja kaksi ei-yhdensuuntaista suuntavektoria, tai jokin tason piste ja normaali, tai normaali ja tason etäisyys origosta, tai kaavan (2) vakiot A,B, C ja D (mikä onkin itse asiassa vakiokerrointa vaille sama asia kuin edellinen kohta) Esimerkki: Olkoon p = [1, 0, 0], q = [0, 1, 0] ja r = [0, 0, 5]. Nyt N = [0, 0, 1] ja D = 5. Tason etäisyys origosta on 5 Pisteen [11, 12, 13] etäisyys tasosta d = 8. 15

Valon heijastuminen tasosta Esimerkkinä vektorilaskennasta tarkastellaan seuraavaksi valon heijastumista tasosta Jos on annettuna tason normalisoitu normaalivektori N ja valon suuntavektori L, mihin suuntaan valo heijastuu kyseisestä tasosta? Heijastuneen valon suuntavektori R voidaan ratkaista pelkästään tuntemalla N ja L Kulma vektorien N ja L välillä on sama kuin vektorien N ja R välillä Tarvittavan kaavan johtamisessa jaetaan R ensin vektorisummaksi R = R 1 + R 2, missä R 1 on tason suuntainen ja R 2 tason normaalin N suuntainen: L R 2 R 1 16

Vektoreita R 1 ja R 2 ei missään vaiheessa lasketa auki, vaan ne toimivat apukäsitteinä lopullista kaavaa johdettaessa Vektoreille pätee nyt yhtälö R 1 = L + R 2 Tästä voidaan ratkaista R = 2 R 2 + L Toisaalta R 2 = ( L N) N (valon suuntavektorin projektio tason normaalille) Sijoittamalla R 2 paikalleen saadaan lopullinen heijastumiskaava R = L 2( L N) N joka on pelkästään pinnan normaalin N ja valon tulosuunnan L funktio Johdettua kaavaa tarvitaan esimerkiksi ray tracingissä ja pintojen valaistuksen laskemisessa, ja tässä kohden kurssia se toimii sopivana pikku esimerkkinä laskennasta vektoreilla 17

Avaruuden monikulmiot Avaruuden monikulmiot määritellään jonona pisteitä p 1, p 2,...,p n (n 3) joita yhdistävät peräkkäiset segmentit p 1 p 2, p 2 p 3,...,p n p 1 Olettaen että monikulmio määrittää tason, voidaan siitä ottaa tarkasteluun kolme kulmapistettä, jotka määrittävät kolmion Kolmion määräämän tason suuntavektorit ovat p 1 p 2 ja p 1 p 3, ja normaali p 1 p 2 p 1 p 3 olettaen tietysti, etteivät suuntavektorit ole yhdensuuntaiset Tason yhtälö saadaan normaalista ja (minkä tahansa) kulmapisteen koordinaateista kuten edellä 18

Yksinkertaiset monikulmiot Vaikka sarja pisteitä p 1, p 2,...,p n määrittelisikin tason, ei pisteiden määrittelemä monikulmio välttämättä silti ole hyvin määritelty Tason monikulmio on yksinkertainen, jos sen reunasegmentit eivät leikkaa toisiaan, paitsi että peräkkäiset reunasegmentit kohtaavat toisensa monikulmion kulmapisteessä Yksinkertaisella tason monikulmiolla on hyvin määritelty ei-tyhjä sisä- ja ulkopuoli (muuten sisäpuolen määrää ns. Zero winding rule) Yleensä pidetään jotenkin huoli siitä, että maailmassa esiintyy vain yksinkertaisia monikulmiota Usein rajoitutaan vielä ns. konvekseihin monikulmioihin monikulmio on konveksi, jos sen minkä tahansa kahden pisteen välinen segmentti kuuluu kokonaisuudessaan monikulmioon ekvivalentti määritelmä on, että konveksin monikulmion kaikki sisäkulmat ovat enintään 180. 19

Itse asiassa käytännössä usein rajoitutaan (esim. grafiikkakortit) pelkästään kolmioihin 20

Leikkaustestejä Suoran ja tason leikkaus Usein toistuva tehtävä tietokonegrafiikassa on erilaisten geometristen objektien, kuten pisteiden, suorien, segmenttien, monikulmioiden, pallojen, sylinterien jne., leikkauksen määrittäminen Edellä jo käsiteltiin kaksiulotteinen segmenttien leikkaus kaksiulotteisia leikkauksia käsitellään myös myöhemmin rasterigrafiikan yhteydessä Taso ja suora tärkeimmät kolmiulotteisen geometrian primitiivit myös tietokonegrafiikassa esim. monikulmioita ja monitahokkaita koskevat ongelmat on mahdollista palauttaa näihin Yksi tärkeimmistä leikkaustesteistä onkin suoran ja tason leikkauspisteen määrittäminen Leikkauspisteen laskukaavan johtamiseksi muodostetaan suoran x = p + t v ja tason yhtälöistä 21

yhtälöryhmä x = p x + tv x y = p y + tv y z = p z + tv z 0 = Ax + By + Cz + D Yhtälöryhmä näyttää hankalalta, mutta tuntemattomia ovat vain x, y, z ja t (joista riittää ratkaista t) Sijoitetaan x, y ja z tason yhtälöön A(p x + tv x ) + B(p y + tv y ) + C(p z + tv z ) + D = 0 Ratkaisu on yksikäsitteinen, jos N r 0: eli sieventäen t = (D + Ap x + Bp y + Cp z ) Av x + Bv y + Cv z t = (D + ( N p )) N v Sijoittamalla ratkaistu t suoran yhtälöihin saadaan ratkaistua leikkauspisteen koordinaatit x, y ja z 22

Jos suoran sijasta tutkittavana on säde (segmentti), voidaan leikkauspisteen laillisuus tutkia katsomalla, onko t 0 (tai t [0,1]) Entä jos N v = 0, eli suora on tason suuntainen? Tutkitaan onko suoran lähtöpiste p tasolla siis toteuttaako se tason yhtälön Vaihtoehto 1: p ei ole tasolla suora ei leikkaa tasoa missään kohdassa Vaihtoehto 2: p ja siten myös suora itse on kokonaan tasolla 23

Pisteen sisältyminen monikulmioon Edellisen avulla voidaan ratkaista myös tehtävä: leikkaako suora x = p + t r pisteiden p 1,...,p n virittämän monikulmion? Tehtävä ratkaistaan etsimällä ensin suoran ja monikulmion virittämän tason leikkauspiste x = [x, y, z] mikäli suora ei satu leikkaamaan tasoa ollenkaan, ei se leikkaa monikulmiotakaan jos taas suora kokonaan tasolla, suora voi leikata monikulmion tai ei tällä ei kuitenkaan yleensä ole väliä algoritmin käyttötarkoituksen kannalta jos tällä on merkitystä, voidaan käyttää myöhemmin nähtäviä suoran leikkausalgoritmeja tason monikulmion sisälle Nyt jäljellä selvittää, onko leikkauspiste x monikulmion sisä- vai ulkopuolella Tämän selvittävät algoritmit toimivat kaksiulotteisessa tasossa, joten tutkittava avaruus projisoidaan kaksiulotteiseksi tämä käy näppärimmin unohtamalla jokin pisteiden kolmesta koordinaatista, jolloin pisteet muuttuvat kaksiulotteisiksi 24

mittasuhteet eivät säily, mutta tehtävän kannalta olennainen topologia säilyy Koordinaateista unohdetaan se, jota vastaava kerroin tasoyhtälössä (A, B tai C) on itseisarvoltaan kaikkein suurin (olkoon se esimerkissä z) maksimoidaan projisoidun monikulmion pinta-ala Lisäksi monikulmiota ja leikkauspistettä siirretään niin, että jälkimmäinen päätyy origoon [0, 0] Määritelmä: piste on monikulmion sisäpuolella, jos mikä tahansa siitä lähetetty säde leikkaa matkallaan parittoman määrän monikulmion segmenttejä (even-odd-sääntö) säteeksi käy vaikkapa positiivinen x-akseli y x 25

Jos segmentin uv päät eivät ole eri puolilla x-akselia, ei säde leikkaa segmenttiä Jos näin on ja lisäksi molemmat u x, v x 0, säde leikkaa segmentin suurin osa segmenteistä voidaan hyväksyä tai hylätä suoralta kädeltä Muussa tapauksessa leikkaavuus määritetään käännöstestillä siirryttäessä segmentin päätepisteestä origon kautta toiseen päätepisteeseen Säde voi leikata myös kulmapisteitä, minkä vuoksi leikkaukseksi hyväksytään esimerkiksi ainoastaan segmentin ylemmän ääripisteen leikkaaminen Vaakasuoria segmenttejä ei oteta huomioon lainkaan Yhteenveto: sen selvittäminen, missä pisteessä suora, säde tai segmentti leikkaa tason määrittävän n-sivuisen monikulmion, voidaan tehdä ajassa O(n) tehokkailla laskutoimituksilla Etu: menetelmä toimii mielivaltaisen muotoisille monikulmioille 26

Piste konveksissa monikulmiossa Kuten aikaisemmin mainittiin, monikulmio on konveksi, jos sen minkä tahansa kahden pisteen välinen segmentti kuuluu kokonaisuudessaan monikulmioon Sen tutkiminen, onko piste q annetun konveksin monikulmion sisällä, voidaan tehdä tehokkaammin kuin yleisille monikulmioille Algoritmi on yksinkertainen: kierretään monikulmion reunasegmentit vastapäivään ja katsotaan, että q sijaitsee kunkin segmentin vasemmalla puolella Edut edelliseen algoritmiin verrattuna: parhaan tapauksen suoritusaika O(1), vaikka huonoimman onkin O(n) missään vaiheessa ei tarvitse ratkaista leikkauspisteitä 27

Jos konveksia monikulmiota saa vähän esikäsitellä, voidaan mielivaltaisen pisteen sisältyminen selvittää ajassa Θ(lg n) Olkoon n-kulmainen monikulmio esitetty n-alkioisena taulukkona, jonka alkiot ovat pisteet p 1, p 2,..., ja tiedossa on jokin valmiiksi laskettu monikulmion sisäpiste q sisäpiste saadaan esimerkiksi kulmapisteiden (tai itse asiassa minkä tahansa kolmen kulmapisteen) aritmeettisena keskiarvona Vierekkäiset säteet qp i ja qp i+1 jakavat tason äärettömiksi kolmioviipaleiksi (sektoreiksi) kukin viipale jakautuu monikulmion sisäpuoliseen ja ulkopuoliseen osaan, jakajana reunaviiva p i p i+1 Kun tutkitaan, sijaitseeko piste x monikulmiossa, etsitään ensin puolitushaulla viipale qp i p i+1 niin, että käännös qp i x tapahtuu vasemmalle, mutta käännös qp i+1 x tapahtuu oikealle Tämän jälkeen tutkitaan käännöstestillä, onko x reunaviivan p i p i+1 oikealla vai vasemmalla puolella ajoaika Θ(lg n) 28

Esimerkki: Tutkitaan alla olevassa monikulmiossa ensiksi viipaletta qp 1 p 5. Koska em. kääntymisehto pätee voidaan valita tämä viipale. Seuraavaksi tutkitaan viipaletta qp 1 p 3. Koska ehto ei päde hylätään ko. viipale ja siirrytään tutkimaan viipaletta qp 3 p 5, jne., kunnes päädytään viipaleeseen qp 3 p 4. Koska x on reunasegmentin p 3 p 4 vasemmalla puolella, se kuuluu monikulmioon. p 5 p 6 p 4 p 7 q x p 8 p 1 p 2 p 3 29

Zero winding rule Zero winding rule:lla määritellään ei-yksinkertaiselle (itseään leikkaavalle) monikulmiolle mielekkäästi sisä- ja ulkopuoli Samoin kuin even-odd-säännössä, tutkittavasta pisteestä kuvitellaan vedetyksi äärettömän pitkä säde Laskuri alustetaan nollaksi, ja joka kerta kun säde leikkaa reunaviivan vasemmalta oikealle, laskuria kasvatetaan yhdellä, ja kun oikealta vasemmalle, vähennetään yhdellä Ne pisteet ovat monikulmion sisällä, joissa laskurin arvo on nollasta poikkeava Esimerkki: Vasemmalla monikulmio missä ulko- (U) ja sisäpuoli (S) on määritelty käyttäen aiemmin nähtyä even-odd-sääntöä. Oikealla sama monikulmio mutta zero winding sääntöä soveltaen: U U S S U S S S S S 30

Kahden kolmion leikkaaminen Laitteistotasolla kolmio on usein tärkein piirtoprimitiivi Kahden kolmion leikkaamisen tutkiminen tapahtuu laskemalla ensin kolmioiden määrittämien tasojen yhtälöt jos tasot ovat yhdensuuntaisia, käytetään pikahylkäystä tai jotakin myöhemmin nähtävää monikulmioiden leikkaustestiä Seuraavassa pikahylkäysvaiheessa kummastakin kolmiosta tutkitaan, sijaitseeko se kokonaan toisen kolmion määrittämän tason toisella puolella Jos näin ei ole, lasketaan tasojen leikkaavasta suorasta välit, jotka leikkaavat kolmiot, ja tutkitaan, onko näiden välien leikkaus ei-tyhjä nämä välit voidaan muodostaa tehokkaasti projisoimalla avaruus kaksiulotteiseksi 31

Pallopinnat Kolmiulotteisen avaruuden pallopinnan määrittelevät keskipiste c ja säde r 0 Pallopinta on niiden pisteiden x joukko, jotka toteuttavat yhtälön cx = r Pallopinnan normaali pisteessä x on yksinkertaisesti vektori cx Pallopinnan ja suoran leikkauspiste lasketaan ratkaisemalla toisen asteen yhtälöryhmästä suoran parametri t samaan tapaan kuin suoran ja monikulmion leikkauksessa leikkauspisteitä voi olla 0, 1 tai 2 riippuen yhtälöryhmän reaalijuurten määrästä, kuvaten tapauksia, joissa suora menee ohi, hipaisee tai läpäisee pallon 32

Muita toisen asteen pintoja Seuraavassa kappaleisiin liittyvät ehdot, jotka pisteen x = [x, y, z] on toteutettava sijaitakseen kappaleen pinnalla: Ääretön sylinteri: (x c x ) 2 + (y c y ) 2 = r 2 Ellipsoidi: (x c x ) 2 α 2 + (y c y) 2 β 2 + (z c z) 2 γ 2 1 = 0 Paraboloidi: (x c x ) 2 α 2 + (y c y) 2 β 2 z + c z = 0 Demo 33

Pallon leikkaustestit Kaksi palloa, joiden säteet ovat r 1 ja r 2, leikkaavat toisensa jos ja vain jos niiden keskipisteiden etäisyys on korkeintaan r 1 + r 2 Taso leikkaa pallon, jos pallon keskipisteen aiemmin nähdyllä kaavalla laskettu etäisyys tasosta on korkeintaan säteen suuruinen Sen tutkimiseksi, leikkaavatko pallo ja pääakseleiden suuntainen laatikko toisensa, tarkastellaan pallon keskipisteen kutakin koordinaatia vuorollaan jos koordinaatti sijaitsee laatikon vastaavien (koordinaatille kohtisuorien) sivujen välissä, leikkaavuus määräytyy muista koordinaateista, ja tämä koordinaatti voidaan jättää huomiotta muuten lasketaan kuinka kaukana keskipiste on tämän koordinaatin suunnassa lähemmästä tasosta näin saatujen etäisyyksien neliöt lasketaan yhteen, jolloin pallo leikkaa laatikon, jos summa on pienempi tai yhtä suuri kuin pallon säteen neliö Esimerkki: Pallo A: 4 2 < 5 2, B: 5 2 + 2 2 > 5 2 34

12 10 8 A B 3 3 7 12 17 35

Monimutkaisempia leikkaustestejä Ennen kahden monimutkaisen kappaleen välistä leikkaustestiä kannattaa tehdä yksinkertaisempia pikahylkäys- ja pikahyväksyntätestejä Aiemmin tehtyjen ja epäonnistuneiden leikkaustestien antamia ylä- ja alarajoja kannattaa hyödyntää, jos vain mahdollista Kalliiden operaatioiden laskemista auki kannattaa lykätä siihen asti, kunnes niiden tuloksia todellakin tarvitaan Leikkaustestejä voi usein yksinkertaistaa projisoimalla kappaleet avaruuteen, jossa on vähemmän ulottuvuuksia Leikkaustestit on tehtävä riittävän robusteiksi niin, etteivät ne sekoa patologisissa tapauksissa, joissa lukualueen tarkkuus ei riitä tarvittavien laskelmien tekemiseen 36

Segmenttijoukon leikkaaminen Miten voidaan tehokkaasti tarkastaa, onko kaksiulotteisen tason n segmentin joukossa ainakin yksi toisensa leikkaava segmenttipari? Naiivi algoritmi tutkii kaikki segmentit pareittain, joten sen ajoaika on O(n 2 ), mutta fiksumpi algoritmi perustuu ns. pyyhkäisyyn Oletamme yksinkertaisuuden vuoksi, ettei joukossa ole y-akselin suuntaisia segmenttejä, eivätkä mitkään kolme segmenttiä leikkaa toisiaan tarkalleen samassa pisteessä Kukin y-akselin suuntainen suora x = t leikkaa jonkin joukon segmenttien osajoukon, ja määrittää kyseisille segmenteille täyden järjestyksen < t sen mukaan, mikä suoran ja segmentin leikkauspisteen y-koordinaatti on Algoritmi pyyhkäisee x-akselin päästä päähän askeltaen segmenttien päätepisteiden kohdilta pitäen yllä dynaamista joukkoa A Aluksi segmenttien alku- ja loppupisteet järjestetään taulukkoon x-koordinaatin mukaan, ratkaisten mahdolliset tasatilanteet y-koordinaatin mukaan 37

Algoritmi askeltaa päätepisteet järjestyksessä, ja jos päätepiste on segmentin alkupiste, segmentti lisätään joukkoon A järjestyksessä oikealle paikalleen, ja sille tehdään leikkaustesti joukon A järjestyksessä edellisen ja seuraavan segmentin kanssa Jos päätepiste on segmentin loppupiste, segmentti poistetaan joukosta A, ja testi tehdään sen edeltäjälle ja seuraajalle Päätepisteitä on 2n kappaletta, joten leikkaustestien ajankäyttö on yhteensä O(n) Joukon tallentamiseen voidaan käyttää esim. puna-mustaa puuta, ja kun kahden alkion välinen vertailu tapahtuu vakioajassa, voidaan alkio lisätä tai poistaa ajassa O(log n) siis koko algoritmin ajankäyttö on O(n logn) Esimerkki: Kuvassa alla joukko segmenttejä ja niiden alla dynaamisesti päivittyvä joukko A. Segmenttien d ja b leikkaus havaitaan kun c poistetaan: 1 1 Mukailtu lähteestä Cormen&Leiserson&Rivest: Introduction to Algorithms, s. 895 38

e a d b c f a a b a c b d a c b d c b e d c b e d b 39

Algoritmin oikeellisuus Jos p on joukon ensimmäinen segmenttien leikkauspiste, ei sen vasemmalla puolella tapahdu leikkauksia, ja joukko A on oikeassa järjestyksessä siihen asti Koska mitkään kolme segmenttiä eivät leikkaa samassa pisteessä, on olemassa jokin sellainen segmentin päätepiste z, jossa pisteessä p leikkaavat segmentit a ja b tulevat joukon A järjestyksessä vierekkäisiksi, eikä z ole pisteen p oikealla puolella Jos toinen segmenteistä a ja b lisätään joukkoon A pisteessä z, algoritmi havaitsee leikkauksen Toisaalta jos pisteessä z poistetaan segmentti c segmenttien a ja b välistä, algoritmi myöskin havaitsee leikkauksen algoritmi löytää kaksi leikkaavaa segmenttiä, jos sellaiset joukossa ylipäänsä on, mutta nämä eivät välttämättä ole ensiksi leikkaavat 40

Algoritmin sovelluksia Edellinen algoritmi voidaan muuttaa toimimaan myös tapauksessa, jossa saa olla pystysuoria segmenttejä, ja kolme tai useampia samassa pisteessä leikkaavaa segmenttiä Olemassa myös versio joka tulostaa kaikki leikkauspisteet pelkkä leikkauspisteiden tulostaminen vie kuitenkin pahimmassa tapauksessa aikaa Ω(n 2 ), jos kaikki segmentit leikkaavat toisensa Samaan ideaan perustuvalla algoritmilla voidaan testata ajassa O(n log n) mm. Ovatko kaksi tason n-kulmiota missään kohdassa päällekkäin? Onko n tason ympyrän joukossa kahta osittain päällekkäistä? Onko n pääakselin suuntaisen suorakaiteen joukossa kahta osittain päällekkäistä? 41

Monikulmioiden leikkaaminen Tehtävä: on annettu pisteiden p 0, p 1,...,p n rajaama monikulmio, ja kuva-alue, jota vasten monikulmio leikataan. Muodosta monikulmiot, jotka yhdessä muodostavat tarkalleen alkuperäisen monikulmion kuva-alueen sisään jäävän osan. Konveksin monikulmion leikkaaminen konveksia monikulmiota vasten tuottaa tulokseksi konveksin monikulmion Jos leikattava monikulmio ei ole konveksi, niin kuva-alueen sisälle saattaa jäädä erillisiä monikulmioita Oletetaan, että käytössä on mahdollisuus tutkia segmentin ja suoran leikkaaminen ja laskea niiden keskinäinen leikkauspiste 42

Sutherland-Hodgman algoritmi Tehokas algoritmi monikulmion leikkaamiseen mielivaltaista konveksia kuva-aluetta vasten Tutkitaan ensin tapausta, jossa leikattava monikulmio on konveksi Koska myös kuva-alue on konveksi, se voidaan tulkita puolitasojen leikkaukseksi kuva-alueen reunasegmentit määrittävät ko. puolitasojen rajalinjat Leikattava monikulmio voidaan leikata yksitellen kutakin rajalinjaa kohti, ja lopputuloksena on monikulmion kuva-alueelle rajattu osa Leikkaus rajalinjan suhteen ajassa O(n), kun algoritmi kulkee monikulmion ympäri ja rakentaa matkalla lennossa uuden monikulmion 43

Yhden rajalinjaleikkauksen tuottama lista monikulmion kulmapisteitä voidaan syöttää seuraavalle leikkaukselle sitä mukaa kun se valmistuu leikkaus rajalinjojen suhteen liukuhihnoittuu tehokkaasti Olkoon piste p i käsitelty viimeksi Tutkittaessa segmenttiä p i p i+1 saadaan neljä tapausta sen mukaan, ylittääkö segmentti rajauslinjan ja kummalla puolella rajauslinjaa piste p i sijaitsee: 1. Segmentti ei ylitä rajauslinjaa, ja p i on kuva-alueella: lisätään listaan piste p i+1 (kuvassa segmentti BC) 2. Segmentti ei ylitä rajauslinjaa, ja p i ei ole kuva-alueella: ei tehdä mitään (kuvassa segmentti DA) 3. Segmentti ylittää rajauslinjan pisteessä q, ja p i on kuva-alueella: lisätään listaan piste q (kuvassa segmentti CD) 4. Segmentti ylittää rajauslinjan pisteessä q, ja p i ei ole kuva-alueella: lisätään listaan pisteet q ja p i+1 (kuvassa segmentti AB): 44

A D E F B C Leikattu monikulmio koostuu siis segmenteistä EB, BC, CF ja FE Jos edellistä algoritmia yritetään suoraan soveltaa ei-konveksille monikulmiolle, kuvaan voi syntyä ylimääräisiä reunoja Algoritmia pitää muuttaa siten, että listaan lisätään pisteen rinnalle tieto siitä, ylitettiinkö siinä rajausviiva ja mihin suuntaan Kun pistelista on rakennettu rajausviivan suhteen, se käydään läpi ja hajotetaan useaksi monikulmioksi Yksittäinen monikulmio alkaa pisteestä, jossa rajausviiva ylitettiin ulkoa sisään, ja loppuu pisteeseen, jossa rajausviiva ylitettiin sisältä ulos 45

Osamonikulmiot leikataan erikseen rekursiivisesti loppuja rajausviivoja vasten 46

Weiler-Atherton leikkaaja Yleispätevä monikulmion leikkausalgoritmi, jossa sekä leikattava että leikkausmonikulmio saavat olla mielivaltaisen muotoisia monikulmioiden asema on algoritmissa keskenään symmetrinen Aluksi lasketaan monikulmioiden segmenttien leikkauspisteet Ensimmäistä monikulmiota seurataan vastapäivään kunnes tullaan segmenttiin, joka risteää toisen monikulmion segmenttiä siirtyen ko. monikulmion sisältä ulospäin Leikkauspisteestä eteenpäin seurataan toista monikulmiota vastapäivään kunnes taas tullaan leikkauspisteeseen Tämän jälkeen seurataan ensimmäistä monikulmiota kunnes tullaan jo käsiteltyyn pisteeseen tulostetaan juuri läpikäydyt pisteet; nämä muodostavat leikkausmonikulmion yhden osan 47

Jatketaan edellisestä ulostulopisteestä etsintää samalla tavalla, kunnes ei enää löydetä käsittelemättömiä ulostulopisteitä Algoritmin kehittyneempi versio Weilerin algoritmi, joka hyödyntää CSG-tekniikan tuloksia monikulmioiden leikkauksen laskemiseen Myös Liang-Barskyn leikkausalgoritmi voidaan laajentaa mielivaltaisen monikulmion leikkaamiseen suorakulmion muotoista leikkausikkunaa vasten 48

Geometriset muunnokset Kolmiulotteisen maailman kappale voidaan ajatella joukoksi A pisteitä kolmiulotteisessa avaruudessa Yleisessä tapauksessa geometrinen muunnos on mielivaltainen funktio f : R 3 R 3 muunnos kuvaa kappaleen A kappaleeksi, jota edustaa joukko {f(x) x A} Yleisessä tapauksessa muunnos ei säilytä mitään alkuperäisen kappaleen ominaisuuksia, ja täytyy siten suorittaa kappaleen jokaiselle pisteelle erikseen Tässä luvussa tarkastelemme ns. affiinimuunnoksia, jotka riittää suorittaa äärelliselle määrälle pisteitä, ja loppujen pisteiden kuvat määräytyvät näistä suoraan yksinkertaisilla laskutoimituksilla 49

Matriisilaskennan kertaus n m-matriisi sisältää n riviä ja m saraketta alkioita Matriisien yhteen- ja vähennyslasku tehdään alkioittain, kuten myös vakiolla kertominen Jos A on n m-matriisi ja B on m p-matriisi, niiden matriisitulo C = AB on n p matriisi, jonka alkiot ovat m c ij = a ik b kj k=1 alkio c ij on matriisin A vaakarivin i ja matriisin B pystyrivin j pistetulo Matriisitulo on liitännäinen (eli assosiatiivinen, (AB)C = A(BC)), mutta ei vaihdannainen (eli kommutatiivinen, AB = BA) Jos n n-neliömatriisin A käänteismatriisi A 1 on olemassa, se toteuttaa yhtälön AA 1 = I identiteettimatriisille I 50

2D-perusmuunnokset Pisteen siirtäminen, skaalaus ja rotaatio voidaan helposti esittää matriisioperaatioina Siirtäminen: [ x y ] = [ x y] + [ ] dx d y Skaalaus origosta: [ ] x y = [ ] sx 0 0 s y [ ] x y Rotaatio θ astetta vastapäivään origon ympäri: [ x y ] [ ] [ cos θ sin θ x = sinθ cos θ y] Kaksi ensimmäistä helppo johtaa, kolmas seuraa sinin ja kosinin summakaavoista 51

Affiinimuunnokset Affiinimuunnokset ovat muunnoksia, jotka voidaan toteuttaa tekemällä edellisiä perusmuunnoksia sekä ns. shear-muunnosta jokin määrä peräkkäin Affiinimuunnokset säilyttävät suorat suorina, joten muunnos riittää tehdä suoran kahdelle pisteelle (segmentin kärkipisteille) Kun kahdelle samansuuntaiselle suoralle tehdään sama affiinimuunnos, myös lopputulokset ovat samansuuntaiset Segmenttien pituudet ja keskinäiset kulmat eivät yleisessä tapauksessa säily Monimutkaisen affiinimuunnoksen matriisin voi laskea valmiiksi, mutta siirron laskeminen yhteenlaskulla kertolaskun sijasta hankaloittaa asioita 52

Homogeeniset 2D-koordinaatit Homogeeniset koordinaatit ovat vaihtoehtoinen tapa esittää 2D-koordinaatisto siten, että jokainen affiinimuunnos, myös siirto, voidaan esittää yhtenä matriisikertolaskuna 2D-koordinaatteihin lisätään kolmas skaalauskomponentti W perustapauksessa W = 1 [x, y, W] ja [x, y, W ] ovat sama piste jos ja vain jos on olemassa t > 0 siten, että x = tx, y = ty ja W = tw samalla pisteellä ääretön määrä esitysmuotoja Piste [x, y, W] homogenisoidaan jakamalla sen kukin komponentti W:llä Pisteet [x, y, W], joissa W = 0, ovat ns. äärettömyyden pisteitä Pistettä [0, 0, 0] ei ole määritelty 53

Muunnokset homogeenisissä koordinaateissa Pisteen siirto voidaan nyt esittää matriisitulona x y W = 1 0 d x 0 1 d y x y 0 0 1 W Skaalaus: x y W = s x 0 0 0 s y 0 0 0 1 x y W Rotaatio: x y W = cos θ sin θ 0 sinθ cos θ 0 0 0 1 x y W 54

Kolme erikoismuunnosta Affiinimuunnos on ns. kiinteän kappaleen muunnos, jos sen muunnosmatriisi on r 11 r 12 t x r 21 r 22 t y 0 0 1 missä vasemman yläkulman 2 2-osamatriisi on ortogonaalinen: sen pystyvektorit ovat kohtisuorassa toisiinsa nähden ja niiden molempien pituus on 1 säilyttää myös kulmat ja pituudet Ns. shear-muunnoksen muunnosmatriisi on 1 a 0 b 1 0 0 0 1 missä joko a = 0 tai b = 0 sen mukaan tehdäänkö shear x- vai y-akselin suhteen Peilaaminen pääakselin suuntaisen tason suhteen on skaalaus negatiivisella kertoimella 55

Muunnosten yhdistely Esimerkki: tason pisteiden rotaatio θ astetta vastapäivään pisteen [x, y] ympäri tehdään kolmessa vaiheessa: 1. Siirto [ x, y], joka siirtää rotaatiopisteen origoon 2. Rotaatio θ astetta vastapäivään origon ympäri 3. Siirto [x, y], joka siirtää rotaatiopisteen alkuperäiselle paikalleen On tärkeää huomata, että operaatiot pitää tehdä oikeassa järjestyksessä, sillä matriisitulo ei kommutoi Joissakin erikoistapauksissa järjestyksellä ei ole väliä: esimerkiksi kaksi peräkkäistä siirtoa, skaalausta tai rotaatiota voidaan tehdä kummin päin tahansa 56

Koordinaatistomuunnos Muunnos ortonormaalien (normalisoitujen ja keskenään ortogonaalisten) yksikkövektorien ux = [ ux1 u x2 ], u y = määräämään koordinaatistoon: u x1 u x2 0 u y1 u y2 0 0 0 1 [ uy1 u y2 ] Ensin voidaan haluttaessa siirtää origo uuteen paikkaan sopivalla siirroksella Mikä tahansa rotaatio voidaan myös tulkita ortonormaaliksi koordinaatistomuunokseksi 57

Tulkinta Affiinimuunnokset tulkittiin edellä siten, että koordinaatisto pysyy paikallaan, kun tason pisteet liikkuvat Yhtä hyvin voitaisiin ajatella, että pisteet pysyvät paikallaan, mutta koordinaatisto siirtyy, pyörii ja venyy Esimerkki: edellä esitetty operaatio kierrosta pisteen ympäri uudelleen tulkittuna: 1. Siirretään koordinaatiston origo tason pisteeseen [x, y] 2. Pyöräytetään koordinaatistoa θ astetta myötäpäivään origon ympäri 3. Siirretään koordinaatiston origo tason pisteeseen [ x, y] Vastaavasti koordinaatistomuunos voidaan tulkita vanhojen koordinaativektorien siirtämisenä uusien koordinaattivektorien kohdalle 58

3D-muunnokset Pisteiden siirtäminen, skaalaus ja rotaatio voidaan yleistää kolmiulotteiseen avaruuteen Myös homogeenisten koordinaattien idea yleistyy suoraan 3D-koordinaatistoon 3D-affiinimuunnosten muunnosmatriisit muodostetaan samoilla periaatteilla kuin 2D-muunnoksissa Siirto ja skaalaus: T(t x,t y, t z ) = 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 s x 0 0 0 S(s x,s y, s z ) = 0 s y 0 0 0 0 s z 0 0 0 0 1 Rotaatio ei tapahdu enää origon tai muunkaan yksittäisen pisteen ympäri, vaan jonkin pääakselin ympäri 59

rotaatiomatriisi z-akselin ympäri: cos θ sinθ 0 0 R z (θ) = sin θ cos θ 0 0 0 0 1 0 0 0 0 1 rotaatiot y- ja x-akselien ympäri saadaan permutoimalla koordinaatit (vastaavat rivit ja sarakkeet matriisissa) syklisesti x y z: R y (θ) = R x (θ) = cos θ 0 sinθ 0 0 1 0 0 sin θ 0 cos θ 0 0 0 0 1 1 0 0 0 0 cos θ sin θ 0 0 sinθ cos θ 0 0 0 0 1 Jokin avaruuden orientaatio, esimerkiksi katsojan suunta, on mahdollista esittää intuitiivisesti ns. Eulerin rotaationa, jolloin annetaan peräkkäin rotaatiokulmat kunkin pääakselin ympäri, esimerkiksi järjestyksessä y-, x- ja ( )z-rotaatio aviaatioterminologian mukaan näistä käytetään nimityksiä head, pitch ja roll (h, p, r) 60

ei-yksikäsitteinen: samaan orientaation voidaan päästä eri h, p, r-arvoilla ns. gimbal lock -ongelma: jos jokin akseli käännetään toisen akselin suuntaiseksi, menetään yksi vapausaste; sama ongelma mm. reaalimaailman gyroskoopeissa x-koordinaatin shear-muunnos z-koordinaatin suhteen; muut yhdistelmät vastaavasti: H xz (s) = 1 0 s 0 0 1 0 0 0 0 1 0 0 0 0 1 Muunnos ortonormaalien yksikkövektorien u x, u y, u z määräämään koordinaatistoon: u x1 u x2 u x3 0 u y1 u y2 u y3 0 u z1 u z2 u z3 0 0 0 0 1 Rotaatio mielivaltaisen (yksikkö)vektorin u ympäri saadaan kuvaamalla u joksikin pääakseliksi, kiertämällä tämän pääakselin ympäri ja kuvaamalla takaisin, esimerkiksi: 61

asetetaan u x = u, ja etsitään ortonormaalit vektorit uy, u z jos C on muunnosmatriisi koordinaatistoon ux, u y, u z, on haluttu muunnos nyt C T R x (θ)c 62

Normaalin muuntaminen Jos affiinimuunnosta M käytetään muodostamaan kuvaus kappaleesta, ei samaa muunnosta voida suoraan käyttää kappaleen normaalivektoreiden kuvaamiseen niin, että tuloksena saadaan oikeat normaalivektorit oikea muunnosmatriisi on (M 1 ) T Rotaatiolle pätee M 1 = M T, jolloin saadaan kätevästi (M 1 ) T = (M T ) T = M Siirros ei vaikuta normaalivektoreihin millään tavalla 63

Kvaternionit Kvaternionit ovat kompleksilukujen laajennos neljään komponenttiin hyödyllisiä 3D-rotaatioiden kompaktissa esittämisessä näiden avulla voidaan esim. välttää gimbal lock -ilmiö Kvaternioni ˆq on pari [[q x, q y, q z ], q w ], jossa q v = [q x, q y, q z ] on imaginääri- ja q w kvaternionin ˆq reaaliosa ˆq voidaan myös esittää muodossa iq x + jq y + kq z + q w, missä i,j ja k ovat ns. imaginääriyksiköt (vrt. kompleksilukujen i) Kvaternionien yhteenlasku, kertolasku, konjugaatti 64

ja normi määritellään ˆq + ˆr = [q v + r v, q w + r w ] ˆqˆr = [q v r v + r w q v + q w r v, q w r w q v r v ] ˆq = [ q v, q w ] n(ˆq) = ˆq ˆq = q 2 x + q 2 y + q 2 z + q 2 w Kvaternonien kertolasku on liitännäinen, lineaarinen, ja alkiolla on yksikäsitteinen käänteisalkio (inverssi): ˆq 1 = 1 n(ˆq) ˆq Kvaternonien kertolasku ei kuitenkaan ole vaihdannainen, esim. ij = ji Yksikkökvaternionille pätee n( ˆq) = 1 65

Kvaternionit rotaatiossa Jokainen yksikkökvaternioni ˆq voidaan kirjoittaa muodossa ˆq = [sinφ u q, cos φ] jollekin 3D-vektorille u q, jolle u q u q = 1 Jos homogeenisilla koordinaateilla esitetty 3D-piste p tulkitaan kvaternioniksi ˆp, kvaternioni ˆqˆpˆq 1 tuottaa pisteen, joka on saatu rotatoimalla p kulman 2φ verran vektorin u q ympäri Peräkkäiset rotaatiot voidaan laskea peräkkäisillä kvaternionien kertolaskuilla Kvaternionien kertolasku on tehokkaampaa kuin matriisien, ja lisäksi muunnokset matriiseista kvaternioneihin ja toisinpäin ovat tehokkaita erityisesti Eulerin rotaatiot helppoja 66