64
Játékgeometria * Hat lecke játékfejleszt˝ oknek oktatási segédanyag, mely a Társadalmi Megújulás Operatív Program Határon átnyúló együttm ˝ uködés a szakképzés és a feln˝ ottképzés területén c. pályázati felhívás keretében megvalósított Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával cím ˝ u, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg. 2013

Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria*

Hat lecke játékfejlesztoknek

oktatási segédanyag, mely a

Társadalmi Megújulás Operatív ProgramHatáron átnyúló együttmuködés a szakképzés és a felnottképzés területén

c. pályázati felhívás keretében megvalósítottMobil alkalmazásfejlesztés az informatikai tudás innovatív

alkalmazásával címu, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projektkeretében valósult meg.

2013

Page 2: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

TA RTA L O M J E G Y Z É K

Bevezetés 4

1. vektorok és mátrixok 6

1.1. Vektorok 6

1.2. Mátrixok 9

1.3. Lineáris leképezések 12

1.4. Lineáris egyenletrendszer megoldása 14

2. alakzatok megadása 16

2.1. Pont 16

2.2. Egyenes, félegyenes, szakasz paraméterezése 17

2.3. Egyenes és sík egyenlete 18

2.4. Dobozok 21

2.5. Sík és háromszög paraméteres eloállítása 23

3. geometriai algoritmusok 26

3.1. Pont lokalizációja 26

3.2. Véges sok síkbeli pont konvex burkának keresése 29

4. alakzatok metszése 33

4.1. Síkok metszése 33

4.2. Egyenes és sík kölcsönös helyzete és kapcsolódó problémák 34

4.3. Doboz-egyenes metszés 37

5. lineáris transzformációk 39

5.1. Egyenestartó transzformációk mátrix alakja 39

5.2. Tükrözés 42

5.3. Pont körüli forgatás síkban 45

5.4. Egyenes körüli elforgatás a térben 45

5.5. Vetítés és a szelekció probléma 46

6. távolságok kiszámítása és ütközések detektálása 51

6.1. Pont és sík távolsága 51

6.2. Pont és egyenes távolsága 52

6.3. Két egyenes távolsága 53

6.4. Doboz és sík távolsága 53

6.5. Gömb távolsága doboztól 55

6.6. Doboz távolsága doboztól 56

6.7. Mozgó gömbök ütközése 59

2

Page 3: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria3

Irodalomjegyzék 61

Jelmagyarázat 63

Tárgymutató 63

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 4: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

B E V E Z E T É S

A matematika a játékprogramozó legfontosabb fejleszto eszközei közé tar-tozik. Ha a játékfejlesztonek nincsenek bizonyos matematikai területekenbiztos ismeretei, akkor napokat vesztegethet el olyan problémák programo-zásával, amelyek megoldása megfelelo matematikai tudással olyan egysze-ru, mint az 1× 1.

Ez a jegyzetet játékfejlesztoknek készül, nem matematikusoknak. Két vég-let között szeretném megtalálni a megfelelo középutat: a legszigorúbb abszt-rakt matematikai felépítés és a „plug-and-play” típusú receptgyujteményközött. Ha csak plug-and-play recepteket ismerünk, és nem látunk a receptmögé, aligha tudunk új problémát önállóan hatékonyan megoldani, vagyakár csak a receptet saját problémánkra hatékonyan adaptálni.

Milyen matematikai ismeret szükséges a játékfejlesztonek? Ennek pontosmeghatározása nyilván lehetetlen, jelen jegyzet anyagát pedig eros terjedel-mi korlátok is befolyásolják.

Legeloször is az szükséges, hogy biztos fogalmi alapunk legyen vektorok-ról és mátrixokról. Az olvasó nyilván tanult már lineáris algebrát, az 1. fe-jezetben leírt anyagot próbáltam a játékfejleszto programozó szemüvegénkeresztül megfogalmazni, az anyagba már itt is beleszove néhány gyakor-lati problémát. Sokszor magam is rádöbbenek, hogy a matematikusok és aprogramozók a lineáris algebrát mennyivel másképpen látják. A kedvenc ol-vasmányom a „programozók szemével” a [GVL13] klasszikus, amely mintajánlott olvasmány is szerepel a javaslataim között.

Másodjára a geometriai algoritmusokat (geometriai programozást) emelem ki.A geometriai programozás az a terület, amely a geometriai problémák szá-mítógépi kezelésével foglalkozik. Tipikus problémája pl. az, hogy adott pont-ról döntsük el, hogy egy alakzathoz tartozik-e vagy sem, vagy két téglatest atérben diszjunkt-e vagy sem. A jegyzet fo profilja a geometriai programozáselemeibe betekintést adni, így tárgyaljuk a következoeket:

• alakzatok reprezentálása és metszete (2. és 4. fejezet)

• tartalmazás vizsgálata (3. fejezet.)

• ütközés vizsgálata (6. fejezet)

• konvex burok keresés (3. fejezet.).

A geometriai programozás nem csak a problémák megoldásainak algoritmu-saival, hanem az algoritmusok vizsgálatával és adatstruktúrák elemzésévelis foglalkozik, ebben a jegyzetben ezt nem tekintjük célnak. Az ajánlott ol-vasnivaló: [PS85, Sza03], de bátorítom az olvasót arra is, hogy a geometriai

4

Page 5: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria5

algoritmusok kereso szóval indítson keresést, s különbözo akadémiai, egye-temi oldalakon kiváló magyar nyelvu olvasnivalókat is találunk egyes rész-problémákról.

A lineáris transzformációk (ezen belül a geometriai transzformációk és a vetítések)ismerete gyakorlatilag a számítógépi geometria minden területén elojön, ígya játékprogramozásban is. Az 5. fejezet fedi le ezt a témát. Az irodalomszinte kimeríthetetlen, én egy régi klasszikushoz, [RA90]-hez ragaszkodom.

Végezetül néhány olyan terület, amely fontos a játékfejlesztonek, de ittnem érintjük.

Elemi algebra, trigonometria és kalkulus. A szükséges algebrai és trigonomet-riai ismeretek ritkán haladják meg az (emelt) középiskolás szintet, talán csaka komplex számokkal és a kvaterniókkal való bánás jelenthet újat. A kalku-lus (lényegében: differenciál és integrálszámítás elemei, kitekintéssel a dif-ferenciálegyenletekre) minden matematika alkalmazónak alapveto bevezetokurzusa. Szeretnék ehhez egy olyan jegyzetet ajánlani, amely megközelíté-sében a programozóknak minden bizonnyal tetszeni fog: [Bla11].

Majdnem mindig, amikor különbözo matematikai problémákat (pl. egyen-letek megoldása, differenciálegyenletek megoldása, differenciálás, stb.) szá-mítógéppel kezelünk, numerikus módszereket alkalmazunk. Ezek ismeretea játékfejlesztésben is fontos lehet. A jegyzetben ezzel a fejezettel nem foglal-kozunk, a [PTVF07] könyvben az olvasó kiváló összefoglalót kap a témából.

A szabad formájú görbék és felületek modellezésének ismerete mindenkétséget kizáróan a játékprogramozó eszköztárába tartozik. Ebben a jegy-zetben errol nem lesz szó, a [Kov11] jegyzetben ezt a témát bevezeto szintenfeldolgoztam, ott további hivatkozásokat is találunk.

Az alakzatok mozgását sokszor fizikai elvek alapján írjuk le, így a fizika ésezen belül a szimulációk elmélete és gyakorlata is kiemelt terület, amelyhezszorosan kapcsolódik a statisztika is.

A jegyzet megírásához használtam még a fentieken kívül a [Tre04] köny-vet. [Fol96] ebben a témában is megkerülhetetlen.

Az interneten elérheto források közül jó kiindulópont az Essential Math forGame Programmers oldal. Ezzel a címmel konferenciákat tartanak, honlapotmuködtetnek (link), ahonnan hasznos anyagokat érünk el ingyenesen.

A jegyzet ábráinak egy részét (a „2D” ábrákat) GeoGebra-val készítettem,tikz exporttal (link). Más ábrák (ezek a „3D” ábrák) az Asymptote program-mal készültek (link).

A pszeudokódok olvasásához felhívom a figyelmet arra, hogy az össze-tartozó programrészek behúzással vannak jelölve, tehát end utasítást nemhasználok.

Végezetül hálásan megköszönöm a lektornak az értékes észrevételeit, ame-lyek lényegesen javították a tananyag érthetoségét.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 6: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

1V E K T O R O K É S M ÁT R I X O K

Ebben a részben a késobbi alkalmazások igényeinek megfeleloen rövidenáttekintjük a vektorokról és mátrixokról tanultakat, elsosorban a jelölésekegyértelmusítése, no meg az „újrakezdok” kedvéért.

1.1 vektorok

Vektor alatt egy programozó egydimenziós tömböt ért, ebben a jegyzet-ben mi ugyanebben az értelemben használjuk a vektor szót, csak geomet-riai elnevezést alkalmazunk. n dimenziós vektorként ebben a jegyzetben avalós rendezett szám n-eseket említjük, azaz Rn elemeit. Ugyanakkor R2

geometriai szempontból a sík egy modellje, R3 pedig a tér egy modellje,tehát Rn elemeit lehet pontoknak és vektoroknak egyaránt nevezni. Ezértjelölésben sem teszünk mindig különbséget pontok és vektorok között, deha hangsúlyozottan pontra gondolunk, akkor nagy betukkel (X ∈ Rn), mígha vektorra, akkor kis betukkel (x ∈ Rn) jelöljük az elemeket. A vektorokattipográfiailag nem fogom aláhúzással jelölni, vagy félkövérrel szedni. (Haprogramot írunk akkor sem használjuk ezeket a megkülönböztetéseket.) Aprogramozó valószínuleg az x vektor i-edik komponensére az x(i) vagy x[i]jelölést szereti, mi megtartjuk a matematikusok által gyakrabban használtxi jelölést. Ebben a tananyagban a vektor elso komponensét 0 indexszel je-lölöm, ahogy a nagyon sok programozási nyelvben ez szokásos. Tehát, hax ∈ Rn, akkor x = (x0, . . . , xn−1).

Jól ismert, hogy Rn-ben tudunk összeadni, a muveletet komponensenkéntelvégezve, s erre az összeadásra Rn kommutatív csoport, ami azt jelenti,hogy a struktúra ugyanolyan tulajdonságokkal rendelkezik, mint a valósszámok összeadás struktúrája. A csoport zéruselemét 0-val jelölöm, ha hang-súlyozottan vektorra gondolok, míg O-val, ha pontra. Ez utóbbit origónakis szokás mondani. Ebben a fejezetben a ponttól bonyolultabb geometriaistruktúráról nem is lesz szó, a 2. részben ezt a hiányt pótoljuk. Az össze-adás segítségével egy geometriai transzformációt értelmezhetünk. Legyemv ∈ Rn rögzített vektor. A

Tv : Rn → Rn, X 7→ Tv(X) = X + v

leképezés Rn eltolása.

6

Page 7: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria7

C

X

X′ = C + λ(X− C)

1. ábra. Középpontos nyújtás

Rn elemeit számokkal is lehet szorozni (ez a szám-vektor szorzás), a szor-zást komponensenként elvégezve. Ennek az R × Rn → Rn leképezésnekegyszeru tulajdonságai:

α · (x + y) = α · x + α · y(α + β) · x = α · x + β · x

(αβ) · x = α(β · x)1 · x = x,

ahol x, y tetszoleges vektorok, α, β pedig tetszoleges valós számok. Az össze-adás és a szám-vektor szorzás segítségével a középpontos nyújtást értelmez-hetjük. Legyen C ∈ Rn rögzített pont, λ 6= 0 rögzített valós szám. A

h(C, λ) : Rn → Rn, X 7→ C + λ(X− C) (1.1)

transzformáció a C középpontú λ arányú középpontos nyújtás (ld. 1. ábra).

Az elobbiek mellett Rn-t az teszi hasznossá a számítógépi alkalmazásokszámára, hogy van benne egy ún. skaláris szorzás, melyet a vektorok megfe-lelo komponensei szorzatának összegével értelmezünk. Matematikailag

x • y =n−1

∑i=0

xiyi. (1.2)

Itt x = (x0, x1, . . . , xn−1) ∈ Rn, y = (y0, y1, . . . , yn−1) ∈ Rn. A skaláris szor-zás jelét tipográfiailag jól megkülönböztetem a számok szorzásától, vagy aszám-vektor szorzástól. A programozó számára a skaláris szorzás az alábbialgoritmust jelenti:

A skaláris szorzás egyik alkalmazása, hogy segítségével kiszámíthatjukegy vektor hosszát:

‖x‖ =√

x • x, x ∈ Rn, (1.3)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 8: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria8

Algoritmus 1.1 Skaláris szorzás

Input: x, yOutput: x • y

d← 0for i = 0 to n− 1 do

d← d + xiyi

vagy két pont távolságát:

d(P, Q) = ‖P−Q‖ =√(Q− P) • (Q− P), P, Q ∈ Rn.

Az (1.3) képletben a jobb oldalon gyökvonás van, amelyet a különbözo algo-ritmusokban igyekszünk elkerülni, ezért ha csak lehet, az

‖x‖2 = x • x

összefüggést használjuk.Két (nem zéró) vektor szöge

cos^(x, y) =x • y‖x‖ · ‖y‖ ,

alapján értelmezheto ahol a szög a [0, π] intervallumban van. Ebben az inter-vallumban a cos függvény invertálható, így a szög egyértelmuen definiált.1

Három dimenzióban van még egy vektor muvelet, amelynek többszörgyakorlati hasznát vesszük még, ez a vektoriális szorzás. Az a, b ∈ R3 vekto-rok a × b-vel jelölt vektoriális szorzata egy olyan a-ra és b-re is merolegesvektor, melynek hosszára fennáll, hogy

‖a× b‖2 = ‖a‖2 · ‖b‖2 − (a • b)2. (1.4)

(1.4)-bol látjuk, hogy a× b zérusvektor, ha a és b párhuzamosak. Ha a és bnem párhuzamosak, akkor (1.4) és a merolegességi feltétel még nem határoz-za meg a× b-t egyértelmuen, hiszen adott hosszúságú, adott síkra merolegesvektor (a sík most az a és b által kifeszített sík) ketto is van, a vektor a síkmindkéz oldala felé mutathat. Megkötjük tehát, hogy (a, b, a × b jobbrend-szert alkosson, azaz olyan sorrendben kövessék egymást a vektorok, mint ajobb kéz hüvelyk, mutató és középso ujja, ha a középso ujjat a tenyérre me-rolegesn tartjuk, a másik két ujjat pedig a tenyér síkjában. Ha a = (a0, a1, a2)és b = (b0, b1, b2), akkor

a× b = (a1b2 − a2b1, a2b0 − a0b2, a0b1 − a1b0).

1 A figyelmes olvasó elgondolkodhat azon, hogy a jobb oldalon miért szerepel egészen biztosan0 és 1 közötti szám. Ez a Cauchy-Schwarz egyenlotlenség közvetlen következménye:

‖x‖2 · ‖y‖2 ≥ (x • y)2.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 9: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria9

2. ábra. Vektoriális szorzás

(1.4)-nek van egy fontos geometriai tartalma: ‖a× b‖ megegyezik az a és báltal kifeszített paralelogramma területével. (Ld. 2. ábra)

1.2 mátrixok

A vektorokat nem csak egy dimenziós tömbben, hanem összetettebb adat-típusban, két dimenziós tömbben is fel lehet írni. Ha egy m · n dimenziósvektor komponenseit m sorba és n oszlopba rendezzük el, akkor egy m× ntípusú mátrixot kapunk. Jelölésben az összes m× n típusú mátrixok halma-zára az Rm×n jelölést alkalmazom:

A ∈ Rm×n ⇐⇒ A = (aij) =

a00 · · · a0,(n−1)...

...a(m−1),0 · · · a(m−1),(n−1)

A jelölés kifejezi azt, hogy az m × n típusú mátrix mint m · n dimenziósvektor tárolható, ahol a vektorban a mátrix elemeit soronként írjuk be. Pl. az(

a bc d

)mátrix tárolása történhet a (a, b, c, d) vektorral. Ha a példa alapján gondol-kodunk, akkor rögtön megértjük, hogy miért nem teszünk különbséget azx ∈ Rn vektor, az x ∈ Rn×1 oszlopvektor, vagy R1×n sorvektor között.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 10: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria10

Azonos típusú mátrixok összeadását és egy mátrix skalárral való szorzá-sát komponensenként végezzük el. (Ekkor a mátrixot lényegében vektornaktekintjük.) Speciális mátrix muvelet a transzponálás, amely egy Rm×n →Rn×m leképezés:

C = At ⇐⇒ cij = aji

A négyzetes mátrixok transzponálása az alábbi (optimalizált) algoritmussalelvégezheto:

Algoritmus 1.2 Transzponálás

Input: (a(i, j))Output: (a(i, j))t

for i = 0 to n− 2 dofor k = i + 1 to n− 1 do

swap a(i, k) with a(k, i)

A mátrixok szorzása:

C = AB ⇐⇒ cij =r−1

∑k=0

aikbkj,

ahol A ∈ Rm×p, B ∈ Rp×n, C ∈ Rm×n. A C mátrix i-edik sorának j-edikeleme megegyezik A i-edik sorának és B j-edik oszlopának skaláris szorza-tával. Speciálisan, legyen A ∈ Rm×n, x ∈ Rn = Rn×1, y ∈ Rm. A soraitjelölje A0, . . . , Am−1. Az 1.3. algoritmus adja meg az Ax + y (y = 0 eseténspeciálisan Ax) kiszámítását.

Algoritmus 1.3 Mátrix-vektor szorzás

Input: A = (A0, . . . , Am−1), x, yOutput: y← Ax + y

for i = 0 to m− 1 doyi ← Ai • x + yi

A mátrix-mátrix szorzás mindig visszavezetheto mátrix-vektor szorzásra,így az elobbi algoritmust megfelelo ciklusban alkalmazva a mátrix-mátrixszorzást is megkapjuk.

A négyzetes mátrix determinánsának általános fogalmát és a kiszámításá-nak különbözo algoritmusait nem tekintjük át, mert csak 2× 2, illetve 3× 3típusú mátrixok determinánsára lesz szükségünk, s ezeket egyszeruen meg-adhatjuk.

det(

a bc d

)=

∣∣∣∣a bc d

∣∣∣∣ = ad− bc,∣∣∣∣∣∣a00 a01 a02a10 a11 a12a20 a21 a22

∣∣∣∣∣∣ = a00

∣∣∣∣a11 a12a21 a22

∣∣∣∣− a01

∣∣∣∣a10 a12a20 a22

∣∣∣∣+ a02

∣∣∣∣a10 a11a20 a21

∣∣∣∣ .

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 11: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria11

3. ábra. A körüljárási irány eldöntése

A 3× 3 típusú mátrixok determinánsának egyik geometriai alkalmazásaa vektorok vegyes szorzata. Ha a, b, c ∈ R3 vektorok, akkor

|a, b, c| = (a× b) • c. (1.5)

Kiszámítása

|a, b, c| =

∣∣∣∣∣∣a0 a1 a2b0 b1 b2c0 c1 c2

∣∣∣∣∣∣ .

Geometriailag |a, b, c| az a, b, c által kifeszített paralelepipedon elojeles térfo-gata, ahol az elojel aszerint pozitív, vagy negatív, hogy (a, b, c) jobbrendszert,vagy balrendszert alkot. Egysíkú vektorok esetén a vegyes szorzat értékenulla.

Bár a konstrukció térbeli, mégis egy síkbeli probléma megoldására adegyszeru segédeszközt a vegyes szorzat. A kérdés, hogy az adott ABC há-romszög (A, B, C ∈ R2) csúcsai az óramutató járásával megegyezo (negatív),vagy ellentétes (pozitív) körüljárást eredményeznek-e. Az ABC háromszögelojeles területe legyen t. t > 0, ha ABC pozitív körüljárási irányú, t < 0ellentétes esetben. Az ABC háromszög az xy síkban van, toljuk el a z = 1síkba (ld. 3. ábra). Az új csúcsok:

a = (a0, a1, 1), b = (b0, b1, 1), c = (c0, c1, 1).

(a, b, c) pontosan akkor jobbrendszer, ha az ABC háromszög pozitív körül-járású. Az (Oabc) tetraéder elojeles térfogata 1

3 t, és ez a térfogat az (a, b, c)által kifeszített paralelepipedon térfogatának hatoda. Így 2t = |a, b, c| és

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 12: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria12

|a, b, c| > 0 esetén az ABC háromszög pozitív körbejárású. Determinánssalfelírva

t =12

∣∣∣∣∣∣a0 a1 1b0 b1 1c0 c1 1

∣∣∣∣∣∣ . (1.6)

Rögzített n-re az n× n típusú nem zéró determinánsú mátrixok algebraiértelemben csoportot alkotnak: két ilyen mátrix szorzata szintén nem zéródeterminánsú mátrix lesz, a szorzás asszociatív, van egységelem (az egy-ségmátrix) és minden elemnek van inverze. Az n × n típusú, I-vel jelöltegységmatrix elemeire:

aij =

{1 ha i = j0 ha i 6= j.

Az A négyzetes mátrix inverze az a A−1-el jelölt, A-val azonos típusú mát-rix, melyre AA−1 = A−1 A = I. Lineáris algebrai tanulmányainkból tudjuk,hogy egy négyzetes mátrix akkor és csakis akkor invertálható, ha determi-nánsa nem zérus. Az n× n típusú invertálható mátrixok csoportját (melyetRn általános lineáris csoportjának is nevezünk) GL(n) jelöli:

GL(n) = {A ∈ Rn×n | det A 6= 0}.

A mátrix aritmetika témakörébol utoljára mátrixok inverzének meghatá-rozásával foglalkozunk. Ismét csak a 2× 2, illetve 3× 3 típusú mátrixokkalfoglalkozunk. Behelyettesítéssel egyszeruen ellenorizheto, hogy(

a bc d

)−1

=1

ad− bc

(d −b−c a

),(

a bc d

)∈ GL(2).

A jobb oldalon a tört nevezojében pontosan az invertálandó mátrix deter-minánsa van, amirol feltettük, hogy nem zéró. A 3 × 3-as esetben legyenA = (aij), det A 6= 0.

A−1 =1

det A

a11a22 − a12a21 a02a21 − a01a22 a01a12 − a02a11a12a20 − a00a22 a00a22 − a02a20 a02a10 − a00a12a10a21 − a11a20 a01a20 − a00a21 a00a11 − a01a10

.

1.3 lineáris leképezések

A mátrix-vektor szorzás (vektort szorzunk balról mátrixszal) a vektorok-nak mindig lineáris transzformációját adja. Ez alatt azt értjük, hogy haA ∈ Rm×n, x ∈ Rn, akkor

LA : Rn → Rm, x 7→ LA(x) = Ax

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 13: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria13

α

x

‖x‖ cos α · w

w

4. ábra. Meroleges vetítés, ‖w‖ = 1

lineáris leképezés, azaz

A(x + y) = Ax + Ay

A(αx) = αAx

teljesül minden x, y ∈ Rn vektorra és α ∈ R skalárra.A továbbiakban három fontos példát adunk lineáris leképezésre.Legyen 0 6= w ∈ Rn, és tekintsük a következo leképezést:

Rn → Rn, x 7→ pw(x) = (x • w) · w.

Ha w egységvektor, akkor pw(x) megadja az x vektor w irányú merolegesvetületét (ld. 4. ábra).

(x •w elojele aszerint pozitív, vagy negatív, hogy a vetület w irányába mu-tat, vagy azzal ellentétes.) Mivel a leképezés lineáris, biztosan megadhatóegy n × n típusú mátrixszal történo balszorzással. Valóban, könnyu ellen-orizni, hogy

pw(x) = wwt · x. (1.7)

Ha a térben vagyunk, és w = (a, b, c), akkor a wwt mátrixabc

(a, b, c) =

a2 ab acba b2 bcca cb c2

.

Mivel az eddigiekben feltételeztük, hogy w egységvektor, az eredményülkapott vetítési mátrix foátlójában a mátrix elemek összege 1. (Emellett amátrix szimmetrikus is!)

Nem okoz különösebb nehézséget a vetítési mátrix felírása akkor sem,ha w nem egységvektor. Ekkor eloször w-t normálni kell, és az így kapott

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 14: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria14

w/‖w‖ vektorra kell az elozo formulákat alkalmazni. Célszeru, ha a normá-lást (a kellemetlen gyökvonás miatt) nem is végezzük el, hanem w/‖w‖-tbeírjuk (1.7)-be, így az x′ vetületre azt kapjuk, hogy

x′ =1‖w‖2 wwt · x,

tehát a vetítési mátrix általánosan

1‖w‖2 wwt =

wwt

wtw. (1.8)

Ne felejtsük el, hogy (1.8)-ban w oszlopvektor.A második példa az elozo példán alapul. Az

Rn → Rn, x 7→ x− pw(x) = x− (x • w) · w (1.9)

leképezés geometriai tartalma világos: ha w egységvektor, akkor x − (x •w) · w megadja az x vektor w irányára meroleges komponensét. Ugyaneztmátrix szorzással (1.7) alapján könnyen felírhatjuk:

x 7→ (I − wwt)x, (1.10)

ahol a képletben I az n× n típusú egységmátrix.Az utolsó példánk csak a térben érvényes. Legyen w = (a, b, c) ∈ R3. Az

Rn → Rn, x 7→ w× x

leképezés szintén lineáris leképezés, azaz egy 3× 3 típusú mátrixszal törté-no balszorzással megadható. Valóban, egyszeru számítással ellenorizhetjük,hogy

w× x =

0 −c bc 0 −a−b a 0

x1x2x3

. (1.11)

1.4 lineáris egyenletrendszer megoldása

Ha A ∈ Rn×n egy négyzetes mátrix, b ∈ Rn vektor, akkor az Ax = pegy lineáris egyenletrendszer az ismeretlen x ∈ Rn vektorra. Gyakran leszszükségünk egy ilyen egyenletrendszer megoldására, ha n = 2. Legyen A =(

a bc d

), p = (p0, p1). Ha det A 6= 0, akkor a megoldást az ún. Cramer-

szabállyal kapjuk:

x0 =

∣∣∣∣p0 bp1 d

∣∣∣∣∣∣∣∣a bc d

∣∣∣∣ =p0d− bp1

ad− bc, x1 =

∣∣∣∣a p0c p1

∣∣∣∣∣∣∣∣a bc d

∣∣∣∣ =ap1 − p0c

ad− bc.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 15: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria15

3 egyenletre és három ismeretlenre a Cramer-szabály hasonlóan alkal-mazható. Az A ∈ GL(3) mátrix oszlopai legyenek (A0, A1, A2), B ∈ R3, azismeretlenek X = (x0, x1, x2). A lineáris egyenletrendszert tömören az

(A0, A1, A2)X = B

alakban írhatjuk. Mivel A invertálható, ezért ez az egyenletrendszer egyér-telmuen megoldható, és a megoldás:

x0 =|B, A1, A2||A0, A1, A2|

, x1 =|A0, B, A2||A0, A1, A2|

, x0 =|A0, A1, B||A0, A1, A2|

.

Mindhárom nevezoben az A mátrix determinánsa szerepel.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 16: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

2A L A K Z AT O K M E G A D Á S A

A számítógépi grafikában a bonyolultabb alakzatokat gyakran célszeruegyszeru, elemi alakzatokra bontani, illetve azokkal modellezni. Az 5. ábrána gömböt háromszögekkel modelleztük, ez segített a láthatóság és árnyéko-lás problémájának megoldásához. Ebben a fejezetben a pontok, az egyenesesés szakaszok, a síkok és háromszöglemezek, a félsíkok, sávok és dobozok,továbbá a konvex sokszöglemezek megadásával és ezek metszéseivel foglal-kozunk. (Sáv alatt a síkban párhuzamos határegyenesu félsíkok metszetétértjük, ha a metszet nem üres, a térben pedig párhuzamos határsíkú félterekmetszetét, ha a metszet nem üres. Doboz alatt a síkon téglalapot, a térbentéglatestet értünk.)

Nagyon gyakran formálisan nincs különbség a síkbeli és a térbeli esetközött. Az egyenes paraméteres eloállítása a síkban pontosan ugyanazzal aképlettel történik (ld. (2.3)), mint térben, csak a képletben szereplo vektorokaz elso esetben R2 elemei (rendezett számpárok), a másik esetben R3 elemei(rendezett számhármasok). A fontosabb analógiákat soroltuk fel az 1. táblá-zatban.

2.1 pont

A legegyszerubb 2D/3D alakzat a pont, melyet két/három derékszögukoordinátájával adhatunk meg: P ∈ Rn (n = 2 vagy 3).

sík tér

egyenes paraméterezése egyenes paraméterezéseegyenes egyenlete sík egyenletefélsík egyenlete féltér egyenletetéglalap téglatest

1. táblázat. Fontosabb sík – tér analógiák

16

Page 17: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria17

5. ábra. A gömböt háromszög lemezekre bontottuk

A pont megadásának másik módja, amikor homogén koordinátákat haszná-lunk. A P = (x, y) pont homogén koordinátái [x1, x2, x3], ha

x =x1

x3, y =

x2

x3. (2.1)

Figyeljünk a jelölésre, a homogén koordináták esetén szögletes zárójelethasználunk, innen tudjuk megkülönböztetni egy térbeli pont Descartes-koordinátáit a síkbeli pont homogén koordinátáitól. Észrevehetjük, hogyegy pont homogén koordinátái nem egyértelmuek, ha [x1, x2, x3] egy ponthomogén koordinátái, akkor az ezzel arányos [λx1, λx2, λx3] (λ 6= 0) isugyanazt a pontot határozza meg, mert ha [x1, x2, x3]-ra teljesül (2.1), akkor[λx1, λx2, λx3]-ra is nyilvánvalóan teljesül. Az (x, y) pont „legegyszerubb”homogén koordinátái [x, y, 1]. A definícióban szereplo osztás miatt x3 6= 0.A számolásokban mégis megengedjük az x3 = 0 lehetoséget is. Errol tudnikell, hogy az ilyen [x1, x2, 0] hármas nem pontot jelöl, hanem a (−x2, x1)síkbeli irányt. Mivel az irány meghatározásához nem zéró vektor szükséges,ezért x1 és x2 egyszerre nem lehet zéró.

A térben a P = (x, y, z) pont homogén koordinátái [x1, x2, x3, x4], ha

x =x1

x4, y =

x2

x4, z =

x3

x4. (2.2)

Az arányosságról elmondottak itt is ugyanúgy érvényesek, mint síkban.

2.2 egyenes , félegyenes , szakasz paraméterezése

Egy egyenest vagy egy szakaszt geometriailag két pont határoz meg. Hamegadunk két pontot, akkor ezek egyértelmuen meghatározzák a rájuk il-leszkedo egyenest, vagy azt a szakaszt, amelynek határpontjai éppen az

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 18: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria18

adott pontok. Legyenek P0, P1 ∈ Rn a pontok (P0 6= P1) ekkor a rájuk il-leszkedo egyenes pontjai (és csakis azok) eloállíthatók az alábbi formában

X = tP1 + (1− t)P0, t ∈ R. (2.3)

A (2.3) képletet úgy kell értelmezni, hogy ha t helyére bármilyen valós szá-mot beírunk, akkor a P0P1 egyenes egy pontját kapjuk, illetve az egyenesminden pontjához találunk ilyen számot. A (2.3)-t könnyen tudjuk értelmez-ni, ha átalakítjuk:

X = tP1 + (1− t)P0 = P0 + t(P1 − P0), t ∈ R,

azaz a P0-ra illeszkedo P1− P0 irányvektorú egyenesrol van szó. A (2.3) kép-letet a P0P1 egyenes paraméteres eloállításának nevezzük.

Ha (2.3)-ben t ∈ [0, 1], akkor a P0P1 szakasz pontjait (és csakis azokat)kapjuk meg:

X = tP1 + (1− t)P0, t ∈ [0, 1]. (2.4)

t = 0 adja a szakasz P0 határpontját, míg t = 1 a P1 határpontot. A 0 < t < 1számok a szakasz belso pontjai.

Ha (2.3)-ben t ∈ [0, ∞), akkor a P0P1 félegyenes pontjait (és csakis azokat)kapjuk meg.

2.3 egyenes és sík egyenlete

Az egyenes (2.3) paraméteres eloállítása mellett a síkban az egyenes egyen-letét is gyakran használjuk. Ehhez az egyenest egy P0 ∈ R2 pontjával és azegyenesre meroleges (nem zéró) u ∈ R2 vektorral, az egyenes ún. normál-vektorával adjuk meg. Vegyük szemügyre a 6. ábrát! Az X pont akkor éscsakis akkor illeszkedik a P0 ponton áthaladó u normálvektorú egyenesre,ha α = π/2, vagy X = P0, azaz, ha

(X− P0) • u = 0. (2.5)

Csak arra kell gondolni, hogy

(X− P0) • u = ‖X− P0‖ · ‖u‖ · cos α, (α ∈ [0, π]), (2.6)

továbbá a [0, π] intervallumban a cos függvény π/2 nél zérus. A (2.5) képle-tet a P0 ponton áthaladó u normálvektorú egyenes egyenletének nevezzük.

A tömör vektoros formában felírt (2.5) egyenletben azonnal ráismerünk aközépiskolában tanult formára. Ha P0 = (x0, y0) és u = (A, B), valamint a„futó” pont X = (x, y), akkor X− P0 = (x− x0, y− y0) és a skaláris szorzástelvégezve az alábbi ismeros egyenletet kapjuk:

A(x− x0) + B(y− y0) = 0 ⇐⇒ Ax + By = Ax0 + By0. (2.7)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 19: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria19

α

P0

u

X

6. ábra. Az egyenes egyenlet

Hogyan tárolhatunk a programunkban egy síkbeli egyenest? Ha a paramé-teres eloállításra gondolunk, akkor négy adat kell hozzá, vagy az egyeneskét pontjának két-két Descartes-koordinátája, vagy egy pont és egy irány-vektor, azaz ismét négy adat. Ha az egyenes (2.7) egyenletére gondolunk,akkor láthatjuk, hogy elegendo egy rendezett számhármas is, az egyenlet-ben szereplo három szám: A, B és C = −(Ax0 + By0). Az [A, B, C] hármas„homogén módon” viselkedik, azaz [λA, λB, λC]-vel felírt

λAx + λBy + λC = 0

nyilvánvalóan ugyanannak az egyenesnek az egyenlete, mint amit az[A, B, C] hármas meghatároz. Éppen ezért az [A, B, C] hármast az Ax + By +C = 0 egyenes homogén koordinátáinak nevezik. Mivel (A, B) az egyenes nor-málvektora, így A és B egyszerre nem zéró. Az [A, B, C] homogén koordiná-tákkal rendelkezo egyenes egy irányvektora (−B, A), így iránya [−B, A, 0].

Homogén koordinátákat használva az alapveto síkbeli illeszkedési és met-szési feladatok egyszeruen megoldhatók. Ezek összefoglalásához állapod-junk meg abban, hogy ha X ∈ R2 egy pont, akkor ennek egy homogénkoordináta hármasát x ∈ R3 jelöli (azaz ugynannál a pontnál ugyanaz abetu, csak nagy betu – kis betu változatban.)

illeszkedés A P pont akkor és csakis akkor illeszkedik az u homogénkoordinátákkal rendelkezo egyenesre, ha p • u = 0.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 20: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria20

7. ábra. Sík normálvektora

összekötés . A P, Q pontokra illeszkedo egyenes homogén koordinátáip× q.

metszés . Ha u és v két egyenes homogén koordinátái, akkor metszéspont-juk homogén koordinátái u× v. Ha a két egyenes párhuzamos lenne,akkor u× v nem pont, hanem irány, a két egyenes közös iránya.

párhuzamos húzás . A P pontra illeszkedo, u homogén koordinátákkalrendelkezo egyenes homogén koordinátái

p× (−u2, u1, 0),

azaz P-t összekötjük az egyenes irányával.

A részleteket a gyakorlati feladatok megoldásával látjuk.A (2.5) egyenletnek van egy másik szépsége: változatlan formában érvé-

nyes térben is, pontosabban, ha P0 ∈ R3 tetszoleges pont és u ∈ R3 nemzéró vektor, akkor (2.5) megadja a P0 pontra illeszkedo, u normálvektorúsík egyenletét. (Egy sík normálvektorán a síkra meroleges nem zéró vek-tort értjük. Ld. a 7. ábrát!) Ha P0 = (x0, y0, z0) és u = (A, B, C), akkor azelobbiekhez hasonló módon a sík egyenlete:

A(x− x0) + B(y− y0) + C(z− z0) = 0.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 21: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria21

ABCDFGHI

8. ábra. Doboz eloállítása sávok metszeteként

Most térjünk vissza a (2.6) egyenlethez! Ha α hegyesszög, azaz cos α > 0,az azt jelenti, hogy X az egyenes (vagy sík) ugyanazon oldalára1 esik, mintP0 + u. Így az egyenes (sík) u iránya által meghatározott oldala (beleértve azegyenest/síkot is)

{X ∈ Rn | (X− P0) • u ≥ 0}, (2.8)

míg az ellentétes oldal

{X ∈ Rn | (X− P0) • u ≤ 0}. (2.9)

2.4 dobozok

A (2.8) és (2.9) formulák megértése után elérkeztünk a számítógépi alkal-mazások egyik legfontosabb alakzatához, a dobozhoz. Doboz alatt a síkbantéglalapot, a térben téglatestet értünk.

A téglalapot mint egymásra meroleges irányú sávok metszetét fogjuk fel(8. ábra). Hogyan adhatunk meg egy sávot? A sáv középpárhuzamosánvegyünk fel egy tetszoleges pontot, melyet jelöljön C. C-bol a sáv egyik ha-táregyeneséhez mutató meroleges vektor legyen u. (9. ábra.) A (C, u) pár

1 Egy síkbeli egyenes a síkot két félsíkra, a sík a teret két féltérre bontja. Ezeket a (zárt) félsíko-kat/féltereket neveztük az egyenes/sík oldalainak.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 22: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria22

C

u

9. ábra. Sáv eloállítása

a sávot meghatározza. Az két határegyenes egy-egy pontja így C ± u, mígmindkét egyenes normálvektora u. A két határegyenes egyenlete tehát

(X− (C± u)) • u = 0 ⇐⇒ (X− C) • u = ±‖u‖2.

A sáv maga az (X − C) • u ≤ ‖u‖2 félsík és a (X − C) • u ≥ −‖u‖2 félsíkmetszete, azaz azon X pontok halmaza, melyekre

−‖u‖2 ≤ (X− C) • u ≤ ‖u‖2 (2.10)

teljesül.A téglalapot ezek után megadhatjuk C középpontjával és a fél oldalvekto-

rokkal, azaz a középpontból két szomszédos oldalhoz merolegesen mutatóegymásra meroleges (a, b) vektorpárral. A téglalap csúcsait a

C± a± b

vektorok adják, ahol a + és − elojelek minden lehetséges (ismétléses) variá-ciójára szükség van. A téglalap (lemez) pontjai (és csakis azok) pedig elegettesznek az alábbi relációknak:

−‖a‖2 ≤(X− C) • a ≤ ‖a‖2

−‖b‖2 ≤(X− C) • b ≤ ‖b‖2.(2.11)

Térben minden analóg, a téglatestet a C középpontjával és az egymásrapáronként meroleges fél élvektorokkal adjuk meg. Legyenek ezek (a, b, c).

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 23: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria23

Így téglatest csúcsai C ± a ± b ± c, a tömör téglatest pontjai (beleértve ahatároló lapokat is) és csakis azok eleget tesznek a

−‖a‖2 ≤(X− C) • a ≤ ‖a‖2

−‖b‖2 ≤(X− C) • b ≤ ‖b‖2

−‖c‖2 ≤(X− C) • c ≤ ‖c‖2

(2.12)

relációknak.A késobbieken azt is megtanuljuk, hogyan kell eldönteni, hogy egy X0

pontból X1 irányban kilott lézersugár eltalál-e egy (C, a, b, c) dobozt.

2.5 sík és háromszög paraméteres eloállítása

Ha megadunk három nem egy egyenesre illeszkedo pontot, akkor ezekegyértelmuen meghatározzák azt a síkot, amely mindhárom pontra illesz-kedik, illetve azt a háromszög lemezt, amelynek csúcsai az adott pontok.A sík a P0 pontra illeszkedik, és a P1 − P0, P2 − P0 vektorok feszítik ki, az-az ezen vektorok lineáris kombináció adják meg a síkban reprezentálhatóvektorokat (és csakis azokat). Így a sík pontjaira

X = P0 + s(P1 − P0) + t(P2 − P0), s, t ∈ R. (2.13)

Ha a (2.13)-ben s, t ∈ [0, 1], akkor a P0P1P2 háromszög lemez pontjait (éscsakis azokat) kapjuk.

Rendezzük át a (2.13) eloállítás jobb oldalát!

X = (1− s− t)P0 + sP1 + tP2 (2.14)

Ha (P0, P1, P2) nem kollineáris rendezett ponthármas, akkor (2.14) alapjánmegállapíthatjuk, hogy van olyan (α, β, γ) rendezett számhármas, hogy

X = αP0 + βP1 + γP2, α + β + γ = 1.

(α, β, γ)-t X normált baricentrikus koordinátáinak nevezzük (P0, P1, P2)-ra vo-natkozóan.

Ha síkban vagyunk (Pi ∈ R2), akkor az elozo egyenletrendszert megolg-hatjuk pl. a következo módon. A problémát tömören felírva (homogén ko-ordinátákkal):

X =

(P0 P1 P21 1 1

)αβγ

=

(X1

).

Cramer-szabállyal megoldva (ld. 15. oldalt)

α =

∣∣∣∣X P1 P21 1 1

∣∣∣∣∣∣∣∣P0 P1 P21 1 1

∣∣∣∣ , β =

∣∣∣∣P0 X P21 1 1

∣∣∣∣∣∣∣∣P0 P1 P21 1 1

∣∣∣∣ , γ =

∣∣∣∣P0 P1 X1 1 1

∣∣∣∣∣∣∣∣P0 P1 P21 1 1

∣∣∣∣ .

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 24: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria24

t0t1

t2

P0

P2

P1

X

10. ábra. Baricentrikus koordináták: ha a P0P1P2 háromszög elojeles területet, akkor α = t0/t, β = t1/t, γ = t2/t és X = αP0 + βP1 + γP2.

(1.6)-ból tudjuk, hogy a fenti megoldásban a számlálókban és a nevezokbenszereplo determinánsoknak egyszeru geometriai jelentése van: megegyez-nek a megfelelo háromszög elojeles területének kétszeresével: az X pontot aháromszög csúcsaival összekötve három (esetleg elfajuló) háromszöget ka-punk. A részháromszög és az eredeti háromszög területének aránya adja amegfelelo normált baricentrikus koordinátákat (ld. 10. ábra).

A (2.13) és (2.3) formulák hasonlítanak abban, hogy a szám együtthatókösszege 1. A szakasz és a sík eloállítása esetében ráadásul a szám együttha-tók mind nem negatívak. Vektorok olyan lineáris kombinációját, melyben azegyütthatók összege 1 és az együtthatók nem negatívak, konvex (lineáris) kom-binációnak nevezzük. Úgy is fogalmazhatunk, hogy a szakasz a határpontjaiösszes konvex kombinációinak halmaza, míg a háromszög lemez a csúcsaiösszes konvex kombinációinak halmaza. Általánosan, ha P0, P1, . . . , Pn egypontsorozat, akkor a pontok összes konvex kombinációi{

X =n

∑i=0

αiPi, | αi ≥ 0,n

∑i=0

αi = 1,

}

a P0, P1, . . . , Pn pontrendszer konvex burkát adják. (Egy alakzat konvex burkaaz a legszukebb konvex halmaz, amely az adott halmazt tartalmazza.)

Véges sok síkbeli pont konvex burka (zárt) sokszöglemez, (elfajuló eset-ben, azaz egy egyenesre illeszkedo pontok esetén szakasz) melynek csúcsai(szakasz esetén határpontjai) az adott pontok közül kerülnek ki. Ez utóbbipontokat nevezik extremális pontoknak. Térben véges sok pont konvex bur-ka konvex poiédertest (elfajuló esetben egy síkra illeszkedo pontok eseténkonvex sokszöglemez, kollineáris pontok esetén szakasz), melynek csúcsai

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 25: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria25

(szakasz esetén határpontjai) az adott pontrendszerbol kerülnek ki, s melye-ket ismét extremális pontoknak nevezünk.

A 2.5. fejezet két problémát vet fel.

1. A pont lokalizációjának problémája: adott pontról eldönteni, hogyadott háromszöglemezben van-e

2. A konvex burok keresés problémáját: adott pontrendszer extremálispontjainak megkeresése.

Mindkét kérdés egy mára önállóvá vált tudományág, melyet magyarul geo-metriai algoritmusok néven szokták meghatározni,2 fontos problémája. A kö-vetkezo fejezetben foglalkozunk a megoldásukkal.

2 Angolul: Computational Geometry

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 26: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

3

G E O M E T R I A I A L G O R I T M U S O K

3.1 pont lokalizációja

Hogyan tudjuk eldönteni, hogy egy pont benne van-e egy háromszögle-mezben vagy sem? Ennek a fontos problémának a megoldására több megol-dást is adunk.

Eloször egy direkt algoritmust adunk, amelyben kiszámítjuk a háromszögsíkjában fekvo pont normált baricentrikus koordinátáit a háromszöglemezrevonatkozóan, s a koordinátákból eldöntjük a tartalmazási kérdést. Ezt azeljárást nagyon könnyu lesz a térre átvinni.

Legyen adva az X0X1X2 háromszög és a síkjában egy D pont. Mivel D aháromszög síkjában van, biztosan vannak olyan s, t együtthatók, hogy

D = (1− t− s)X0 + sX1 + tX2.

RendezveD− X0 = s(X1 − X0) + t(X2 − X0). (3.1)

(3.1) egy lineáris egyenletrendszer. Az ismeretlenek s és t, az egyenletekszáma annyi, amennyi koordinátája van a vektoroknak. A további képletekegyszerusítése kedvéért vezessük be a következo jelöléseket: D − X0 = w,X1 − X0 = u, X2 − X0 = v. Tehát az egyenletrendszer

w = su + tv. (3.2)

Síkban két egyenlet és két ismeretlen van, a megoldást rögtön kapjukCramer-szabállyal:

s =

∣∣∣∣w0 v0w1 v1

∣∣∣∣∣∣∣∣u0 v0u1 v1

∣∣∣∣ , t =

∣∣∣∣u0 w0u1 w1

∣∣∣∣∣∣∣∣u0 v0u1 v1

∣∣∣∣ ,

ahol w = (w0, w1), u = (u0, u1), v = (v0, v1). Mindkét tört nevezoje ugyan-annyi (csak egyszer kell kiszámolni). Ez a közös nevezo bizonyosan nemnulla, mert X1 − X0 és X2 − X0 nem párhuzamosak.

26

Page 27: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria27

P D

11. ábra. A horizontális egyenes D elott lép be a sokszögbe. Csúcson is át-megy és ez a csúcs a számolásba kétszeresen számít. Az összes keresztezé-sek száma az ábrán páratlan, tehát D a sokszög belsejében van.

Térben (3.2) megoldásához szorozzuk az egyenletet skalárisan u-val ésv-vel:

w • u = s(u • u) + t(v • u)

w • v = s(u • v) + t(v • v).

Innen a megoldás (s, t)-re szintén a Cramer-szabály alapján:

s =

∣∣∣∣w • u v • uw • v v • v

∣∣∣∣∣∣∣∣u • u v • uu • v v • v

∣∣∣∣ , t =

∣∣∣∣u • u w • uu • v w • v

∣∣∣∣∣∣∣∣u • u v • uu • v v • v

∣∣∣∣ .

D akkor és csakis akkor az X0X1X2 zárt háromszöglemez pontja, ha

0 ≤ s ≤ 1 és 0 ≤ t ≤ 1.

A második algoritmus csak síkban muködik, viszont nem csak három-szöglemezre, hanem tetszoleges egyszeru sokszöglemezre. (Emlékeztetoül:az egyszeru sokszög oldalai egymást nem metszik, minden csúcsban kétoldal találkozik. Az egyszeru sokszög a sík (sokszögvonaltól különbözo)pontjait két osztályba sorolja, a sokszög külsejébe és belsejébe.) Azt tesztel-jük, hogy a sík egy D pontját tartalmazza-e a sokszög belseje. Gyakorlati-asabb nyelven megfogalmazva. Egy síkbeli egyszeru sokszöget megadunkcsúcsaival: P0, P1, . . . , Pn−1. A felhasználó egérrel kattint a képernyon. El kelldönteni, hogy a kattintás helye benne van a sokszög belsejében, vagy nincs.

Húzzunk a D ponton keresztül egy ` horizontális, azaz az x tengellyelpárhuzamos egyenest (11. ábra). Eloször tegyük fel, hogy az egyenes nemmegy át csúcson. Induljunk a sokszögön kívülrol a mínusz végtelen irá-nyától a plusz végtelen irányába, s akkor álljunk meg, ha elértük a pontot.Amikor a sokszög valamelyik oldalát eloször keresztezzük, akkor beléptünk

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 28: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria28

a sokszög belsejébe. A következo keresztezésnél kilépünk. Számoljuk a ke-resztezéseket! Ha a pontba érve a keresztezések száma páratlan, akkor úgyértünk D-hez, hogy utoljára beléptünk a sokszög belsejébe, tehát a sokszög-lemez tartalmazza D-t. Ha a keresztezések száma páros (beleértve 0-t), akkorD kívül van a sokszöglemezen. (Úgy értünk D-hez, hogy közben utóljárakiléptünk a sokszög belsejébol, vagy egyáltalán be sem léptünk.) Ha a hori-zontális egyenes csúcsot tartalmaz, akkor képzeljük el, hogy gondolatban azegyenest D körül elforgatjuk az óramutató járásával ellentétesen épp annyi-ra, hogy az egyenes már ne menjen át a csúcson, de új csúcsot se érjen el.A csúcs annyiszorosan számít, ahány metszéspont keletkezik az elforgatásután. (Ez a szám ketto, egy vagy nulla lehet. A 11. ábrán két metszéspontkeletkezett az elforgatás után, vázoljuk a többi lehetséges esetet is!) Azt akövetkeztetést vonhatjuk le, hogy egy oldalszakasz figyelmen kívül hagyan-dó a keresztezések számlálásánál, ha mindkét csúcs rajta van `-n, vagy ha ametszés a kisebb ordinátájú1 határpontnál történt.

Az algoritmus elvégzéséhez szükséges számítás mindössze annyi, hogyegy horizontális egyenes és egy szakasz metszéspontját ki tudjuk számolni.Legyen D második koordinátája d, Pi = (xi, yi). A PiPi+1 szakaszt tekintjük.(Az utolsó szakasz Pi+1P0, ezért a csúcsokat a

(P0, . . . , Pn−1, P0 = Pn)

szerkezetben érdemes megadni.) Ha yi = yi+1, akkor a szakasszal nem kellfoglalkozni. Egyébként a szakasz paraméteres eloállításából a metszési prob-léma:

Xi + t(Xi+1 − Xi) = D + s · (1, 0).

(0, 1)-el skalárisan szorozva:

yi + t(yi+1 − yi) = d,

ahonnant =

d− yiyi+1 − yi

.

Ha 0 ≤ t ≤ 1, akkor a horizontális egyenes metszi a szakaszt, és az Mimetszéspont abszcisszája2

(Mi)1 = xi +d− yi

yi+1 − yi(xi+1 − xi),

míg ordinátája (természetesen)

(Mi)2 = yi +d− yi

yi+1 − yi(yi+1 − yi) = d.

Ha (Mi)1 < d és (Mi)2 > min{yi, yi+1}, akkor a metszéspontot számláljuk.

1 ordináta = második koordinta2 abszcissza = elso koordináta

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 29: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria29

Algoritmus 3.1 Sokszöglemez belo pontjára kattintottunk-e?Input: (P0, . . . , Pn−1, P0 = Pn), D

L← 0for i = 0 to n− 1 do

if yi+1 6= yi and (Mi)1 < d and (Mi)2 > min{yi, yi+1} thenL← L + 1

if L páros thenD nem belso pont

elseD belso pont

3.2 véges sok síkbeli pont konvex burkának keresése

A konvex burok keresése a geometriai számítások egyik központi prob-lémája, több algoritmus ismert rá. Egy konkrét alkalmazást említek: a sza-badformájú görbék modellezésénél használt több görbetípusra is igaz azún. konvex burokban maradás problémája, azaz a görbe a kontrollpontokkonvex burkában halad. (Részletesebben lásd például a [Kov11] jegyzet 3.és 4. fejezetét.) Így ha ismerjük a kontrollpontok konvex burkát, akkor ametszési és láthatósági feladatokat eloször a konvex burokra ellenorizzük.Ha a kontrollpontok konvex burka nem látható, akkor a görbe sem látszik.Ha két görbe kontrollpontjaiknak konvex burka nem metszo, akkor a görbéksem metszok.

Sok algoritmus használja az alábbi fontos észrevételt. Ha P0 = (x0, y0),P1 = (x1, y1) és P2 = (x2, y2) síkbeli pontok, akkor a P0P1P2 (esetleg elfajuló)háromszög elojeles területe (ld. (1.6))

t(P0P1P2) =12

∣∣∣∣∣∣x0 y0 1x1 y1 1x2 y2 1

∣∣∣∣∣∣ . (3.3)

Ha a három pont kollineáris, akkor a determináns értéke 0. Egyébként azelojel úgy értendo, hogy ha P0P1P2 balra kanyarodik P1-nél, akkor a deter-mináns pozitív elojelu, ha jobbra kanyarodik, akkor negatív elojelu.

A konvex burok kereso algoritmusoknk alapvetoen két problémát kellmegoldaniuk:

1. kiválasztani az extremális pontokat,

2. ezeket megfelelo sorrendbe rendezni.

A következokben ismertetett konvex burok kereso algoritmus a Jarvis-algoritmus. Azon az észrevételen múlik, hogy a megadott ponthalmazbólkiválasztott két pont összeköto szakasza akkor és csakis akkor a konvex

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 30: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria30

12. ábra. Pontrendszerek extremális pontjai (pirossal)

burok oldalszakasza, ha az összes többi pont a szakaszon, vagy a ponto-kat összeköto egyenes ugyanazon oldalán van. n pont (n

2) egyenest határozmeg. Minden egyeneshez (legrosszabb esetben) n− 2 pont elhelyezkedésétkell megvizsgálni. Vegyük észre, hogy ha találtunk egy extremális pontot,akkor a konvex burok hozzá tartozó (egyik) oldalának másik végpontja isextremális pont, tehát extremális pontból kiindulva mindig találunk egy kö-vetkezo extremális pontot. (Ez az észrevétel az extremális pontok sorrend-jének problémáját meg is oldja.) A legkisebb abszcisszájú pont (vagy azokegyike) biztosan extremális pont. Ha több legkisebb abszcisszájú pont van,akkor közülük a legkisebb ordinátájú biztosan extremális pont.

A 12. ábrán szemléltettem, hogy milyen problémák vetodnek fel, amelyek-re a konvex burok kereso algoritmusnak figyelnie kell: kollineáris pontokesetén két másik adott pont között levo pont nem lehet extremális pont (baloldali ábra); elofordul, hogy az adott ponthalmaz egy egyenesre illeszkedopontrendszer.

Kétfajta tesztet alkalmazunk. Mindkét tesz elválasztásról szól, az elso egydimenzióban, a második két dimenzióban. Az egy dimenziós teszt a „közöttvan” teszt. Ha t(P0P1X) = 0, azt kell eldönteni, hogy X a P0P1 szakaszon vanvagy sem, vagyis X a P0, P1 pontok között van, vagy sem. A párhuzamosvetítés a „között van” relációt megtartja. Így csak az abszcisszákat (vagyordinátákat) kell vizsgálni. Legyen P0 = (x0, y0), P1 = (x1, y1), X = (x, y).x0 6= x1 esetén X pontosan akkor nincs P0 és P1 között, ha

x < min{x0, x1} vagy x > max{x0, x1}.

Ha x0 = x1, akkor ordinátákra végezzük el ugyanezt a tesztet.A második teszt a (két dimenziós) elválasztás teszt. Azt kell tesztelnünk,

hogy vannak-e az adott pontok között olyanok, amelyeket két kiválasztottpont, P0P1 elválaszt. Ezt megtehetjük úgy, hogy csak a P0P1-gyel nem kol-lineáris pontokat vizsgáljuk, kiszámítjuk ebbol a halmazból egy X0 pontrat(P0P1X0) elojelét, majd az összes többi X pontra teszteljük t(P0P1X) elojelét.Ha minden elojel megegyezik t(P0P1X0) elojelével, akkor minden pont P0P1azonos oldalán van.

Legyen a kiválasztott két pont Pi és Pj (i 6= j), az elobbiek szerint felteheto,hogy Pi extremális pont. Az vizsgáljuk, hogy PiPj a konvex burok oldal-

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 31: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria31

szakasza-e (i 6= j). (Röviden úgy fogom használni, hogy „jó” szakasz.) Haigen, akkor Pj extremális pont. Legyen S a Pi-vel és Pj-vel kollineáris pontokhalmaza (beleértve Pi-t és Pj-t is), míg T a Pi-vel és Pj-vel nem kollineárispontok halmaza.

1. Eloször az S halmaz pontjaira ellenorizzük, hogy belül vannak-e a PiPjszakaszon.

for X ∈ S doif ¬Pi − X− Pj then

Pj nem extremális pont

2. Ha Pj-t nem zártuk az elso lépésben ki, legyen |T| =m.

for k = 1 to m− 1 doif sgn t(PiPjTk) 6= sgn t(PiPjT0) then

PiPj nem jó szakasz és Pj-t kizárjuk

3. Ha Pj-t nem zártuk ki a második lépésben sem, akkor Pj extremális pont.(Ha PiPj nem jó szakasz, attól még Pj lehet extremális pont.)

Példaként a korábban már szerepelt „öt pöttyös” alakzaton illusztrálomaz algoritmust. A pontokat eloször az abszcisszák szerint növekvo sorrend-be rendeztem, ahol azonos abszcisszák vannak, ott az ordináták szerint isrendeztem.

P0

P1

P2

P3

P4

P5

A legkisebb abszcisszájú pontok között a legkisebb ordinátájú pont ext-remális pont lesz.

P0

P1

P2

P3

P4

P5

P0P1 jó szakasz, s így P1 extremális pont, mert a P0P1 egyenesen nincstovábbi pont a pontrendszerbol, és P0P1 nem választ el pontokat az adottpontrendszerbol.

P1P2 nem jó szakasz, mert a P0 és P3 pontokat elválasztja. A P3 pontotazért kell kizárni, mert elválasztja P4-et és P1-et. P1P4 sem jó szakasz, mert

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 32: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria32

P0

P1

P2

P3

P4

P5

P0

P1

P2

P3

P4

P5

P0

P1

P2

P3

P4

P5

elválasztja a P0 és P5 pontokat. Végül P1P5 megfelelo szakasz, és P5 extrem-ális pont.

P0

P1

P2

P3

P4

P5

P5 mellé már csak a P2 P3, P4 pontok közül kell társat találni. P2 és P3könnyen kiesnek, mert P2 megbukik a két dimenziós elválasztás teszten,P3 már az egy dimenziós elválasztás teszten (a „között van” teszten). P4megfelelo.

P4-bol kiidulva csak a P2 és P3 pont jöhet szóba, de P2-t a „között van”teszt miatt, P3-t a két dimenziós elválasztás tesz miatt kell kizárni: vala-mennyi extremális pontot megtaláltuk.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 33: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

4

A L A K Z AT O K M E T S Z É S E

4.1 síkok metszése

Ha két sík normálvektora nem párhuzamos, akkor a két sík metszésvonalaegyenes. Hogyan tudjuk meghatározni két sík metszésvonalát? Legynek asíkok normálvektorai w1 és w2, a síkok egyenletei tehát

w1 • X = d1 (4.1)

w2 • X = d2.

(4.1)-ben három ismeretlen és két egyenlet van. Ha v = w1 × w2 6= 0, akkoraz egyenletrendszernek van megoldása, s a megoldások halmaza egy egye-nes, a két sík metszésvonala, melynek irányvektora v. Egy pontot kell mégtalálnunk a megoldás halmazban. Az irányvektor valamelyik koordinátája(mondjuk az i-edik) biztosan nem nulla. X-ben az i-edik koordinátát 0-nakhelyettesítve (4.1)-ben már csak két ismeretlen lesz, és az egyenletrendszertegyértelmuen meg tudjuk oldani. (4.1) megoldásaként kapjuk a metszésvo-nal pontjának hiányzó két koordinátáját.

Három sík kölcsönös helyzetét vizsgálva, a síkok normálvektorait jelöljew1, w2, w3; a síkok egyenletei

w1 • X = d1 (4.2)

w2 • X = d2

w3 • X = d3.

Legyen W = (w1, w2, w3)t (azaz W i-edik sora wi), D = (d1, d2, d3)

t ∈ R3×1.A (4.2) lineáris egyenletrendszer mátrix alakja WX = D. Az egyenletrend-szer megoldható, ha rang W = rang(W, D). A megoldható esetben a megol-dástér dimenziója (3− rang W), azaz lehet pont, egyenes, vagy sík. A megol-dást általánosan a Gauss-eliminációval tudjuk kezelni. Ha rang W = 3, azaza három normálvektor nem egy síkban reprezentálható, akkor X = W−1D.Jóllehet a Gauss-elimináció az inverz meghatározására is alkalmazható, cél-szeru direkt megoldást adni a problémára, hogy az egymást követo elimi-nációs lépések következtében fellépo numerikus hibaterjedést elkerüljük. W

33

Page 34: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria34

inverzét a kifejtési tétel alapján, a „szorzótársak módszerével” képezve, amegoldást a következoképpen adhatjuk meg:

W−1D =d1(w2 × w3)− d2(w3 × w1) + d3(w1 × w2)

det(w1, w2, w3).

4.2 egyenes és sík kölcsönös helyzete és kapcsolódó problé-mák

Legyen a sík egyenlete w • X = d, az egyenes paraméteres eloállításaX = X0 + tv. Ha v •w 6= 0, akkor az egyenes metszi a síkot. Valamely t ∈ Rértékre X = X0 + tv kielégíti a sík egyenletét:

(X0 + tv) • w = d,

ahonnan t kifejezheto:

t =d− w • X0

w • v,

azaz a metszéspont

X = X0 +d− w • X0

w • vv. (4.3)

Háromszöglemez és szakasz metszése

Az eddig ismertetett problémák közül a „legvalószerubb”: a síkok, egye-nesek „végtelen” alakzatok, s mint ilyenek absztrakciók.

Elso módszerként a síkot egyenletével kezeljük. A háromszög csúcsailegyenek P0, P1, P2, a szakasz határpontjai X0, X1. A háromszöglemezsíkjának egyenletét P0P1P2 ismeretében fel tudjuk írni: w • X = d, aholw = (P1 − P0)× (P2 − P0).

A feladatot három lépésben oldjuk meg

1. eldöntjük, hogy a szakasz metszi-e a háromszög lemez síkját

2. ha az elozo lépésben a válasz igen akkor meghatározzuk a sík és a sza-kasz metszéspontját

3. eldöntjük, hogy a metszéspont a háromszöglemezen belül esik-e.(V.ö.3.1. fejezet: A pont lokalizációja.)

Képezzük azF : R3 → R, X 7→ F(X) = w • X− d

függvényt. F a sík pontjaira 0 értéket vesz fel, egyébként a sík egyik oldalánpozitív, a másik oldalán negatív. Az adott szakasz csak akkor metszheti aháromszög lemezt, ha F(X0) és F(X1) elojele különbözik.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 35: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria35

A továbbiakban tegyük fel tehát, hogy sgn F(X0) sgn F(X1) = −1. Azelozoekben ismertetett módszer szerint (ld. a (4.3) formulát) megkeressük asík és a szakasz metszéspontját.

A 3. lépésben most egy újabb módszert alkalmazunk. Megvizsgáljuk aháromszög síkjában a háromszög minden oldalára, hogy az X metszéspontugyanazon oldalon van-e, mint a háromszög harmadik (a szóban forgó ol-dalra nem illeszkedo) csúcsa. Ha a kiválasztott oldal a PiPj oldal és a harma-dik csúcs Pk, akkor (Pi − Pj)× (X − Pj) = 0 esetén X a PiPj egyenesen van.Egyébként (Pi− Pj)× (Pk− Pj) és (Pi− Pj)× (X− Pj) is a háromszög síkjárameroleges vektor, tehát egyirányúk vagy ellentétes irányúak. Egyirányúságesetén van X a jó oldalon, ekkor a vizsgálatot folytatjuk a következo oldallal(ha még nem vizsgáltuk meg mindhárom oldalt), míg ha a két vektor ellen-tétes irányú, akkor a metszéspont biztosan nem a háromszög lemezre esik.A két vektor azonos irányát a skaláris szorzatuk dönti:

(Pi − Pj)× (Pk − Pj) • (Pi − Pj)× (X− Pj){> 0 akkor X „jó” oldalon van< 0 akkor X „rossz” oldalon van.

Sugár metszése háromszöggel

Az X0X1 egyenes (félegyenes, szakasz) metszetét vizsgáljuk a P0P1P2 há-romszöglemezzel. Elegendo az eljárást egyenesre megadni, félegyenesre,szakaszra könnyen módosítható. A megoldáshoz az egyenes és a három-szöglemez paraméteres eloállítását használjuk. A kérdés, hogy vannak-eolyan t ∈ R, u, v ∈ [0, 1] paraméterek, hogy

(1− t)X0 + tX1 = (1− u− v)P0 + uP1 + vP2. (4.4)

Ha a probléma az X0X1 félegyenesrol szól, akkor t ∈ [0, ∞), míg ha az X0X1szakaszról, akkor t ∈ [0, 1]. (4.4)-et rendezve:

t (X1 − X0)︸ ︷︷ ︸a

+u (P0 − P1)︸ ︷︷ ︸b

+v (P0 − P2)︸ ︷︷ ︸c

= P0 − X0︸ ︷︷ ︸d

.

A jobb áttekinthetoség kedvéért vezessük be az elobbiekben már jelölt elne-vezéseket:

ta + ub + cv = d. (4.5)

(4.5) egy lineáris egyenletrendszer a t, u, v ismeretlenekre. a, b, c, d ∈R2 vagy ∈ R3 vektorok, annyi egyenletünk van, ahány dimenzióban va-gyunk. Kiegészíthetjük a vektorokat a 0 utolsó koordinátával, így mindig há-rom dimenzióban vagyunk, a továbbiakban ezt tesszük. A lineáris egyenlet-rendszert természetesen általánosan meg tudjuk oldani Gauss-eliminációval.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 36: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria36

Az egymásba ágyazott eliminációs lépések azonban növelik a numerikus hi-bákat, így (4.5)-öt explicit módon fogjuk megoldani. b és c nem párhuzamosvektorok, így vektoriális szorzatuk nem zéró. Emellett b× c meroleges b-reis és c-re is. Így (4.5)-öt skalárisan szorozva b× c-vel

t(a • (b× c)) = d • (b× c). (4.6)

Két esetet különböztetünk meg.1. eset: a • (b× c) 6= 0. Ekkor t-t (4.6)-ból kifejezhetjük:

t =d • (b× c)a • (b× c)

.

(4.5)-ben máris csak két ismeretlen van:

ub + vc = d− ta︸ ︷︷ ︸e

. (4.7)

(4.7)-et skalárisan szorozva b-vel és c-vel:

(b • b)u + (c • b)v = e • b

(b • c)u + (c • c)v = e • c,

majd a Cramer-szabállyal megoldva:

u =

∣∣∣∣e • b c • be • c c • c

∣∣∣∣∣∣∣∣b • b c • bb • c c • c

∣∣∣∣ , v =

∣∣∣∣b • b e • bb • c e • c

∣∣∣∣∣∣∣∣b • b c • bb • c c • c

∣∣∣∣ .Ha u, v ∈ [0, 1], akkor az egyenes metszi a háromszöglemezt. Ha emellettt ≥ 0, akkor a metszéspont rajta van az X0X1 félegyenesen, ha t ∈ [0, 1],akkor az X0X1 szakaszon is.

2. eset: a • (b × c) = 0. A két-dimenziós síkbeli problémánál mindig eza helyzet, a térben akkor fordul elo ez az eset, ha a pontok mind egy sík-ban vannak. Ekkor (4.4)-nek végtelen sok megoldása van: minden t-re abal oldali pont a közös síkban van, ezért u és v is meghatározható hozzá.(4.4) helyett az X0X1 egyenes és a háromszög oldal szakaszainak metszésétkell vizsgálni. Mivel a két-dimenziós problémánál is kiegészítettük a ponto-kat harmadik koordinátával, vektoriális szorzással mindig el tudjuk dönteni,hogy az egyenes párhuzamos-e valamelyik oldallal. Pl.

(X1 − X0)‖P0 − P1 ⇐⇒ (X1 − X0)× (P0 − P1) = 0.

Csak azokat az oldal szakaszokat kell vizsgálni, amelyek nem párhuzamo-sak az egyenessel. Legyen pl. a P0P1 szakasz ilyen. Az X1X0 és P1P0 egyene-sek metszéspontjának megkeresése a

(1− t)X0 + tX1 = (1− u)P0 + uP1 (4.8)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 37: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria37

lineáris egyenletrendszer megoldását jelenti t-re és u-ra. Rendezve

t (X1 − X0)︸ ︷︷ ︸a

+u (P0 − P1)︸ ︷︷ ︸b

= P0 − X0︸ ︷︷ ︸d

.

a-val és b-vel skalárisan szorozva mindkét oldalt:

(a • a)t + (b • a)u = d • a

(a • b)t + (b • b)u = d • b.

Cramer-szabállyal megoldva:

t =

∣∣∣∣d • a b • ad • b b • b

∣∣∣∣∣∣∣∣a • a b • aa • b b • b

∣∣∣∣ u =

∣∣∣∣a • a d • aa • b d • b

∣∣∣∣∣∣∣∣a • a b • aa • b b • b

∣∣∣∣ .X0X1 akkor és csakis akkor metszi a P0P1 szakaszt, ha u ∈ [0, 1], a metszés-pont pedig M = (1− u)P0 + uP1. Ehhez t-t nem is kell meghatározni, de haaz is fomtos, hogy a metszéspontról megállapítsuk, hogy az X0X1 félegye-nesen vagy szakaszon van, akkor t értékét is meg kell vizsgálni. M akkor éscsakis akkor van az X0 kezdopontú X1-et tartalmazó félegyenesn, ha t ≥ 0,illetve akkor és csakis akkor van a P0P1 szakaszon, ha t ∈ [0, 1].

A fentebb ismertetett módszer egyenes és konvex sokszöglemez metszésiproblémájára is alkalmazható. Ha a sokszöglemez és az egyenes nem egysíkban vannak, akkor a konvex sokszöglemezt egy csúcsból induló átlóivalháromszöglemezekre lehet bontani, ezekre a háromszögekre kell a metszésifeladatot megoldani az elozoek szerint (1. eset). Ha az egyenes és a sokszög-lemez egysíkúak, akkor az egyenes és az oldalszakaszok metszési problémá-ját vizsgáljuk a 2. eset szerint.

4.3 doboz-egyenes metszés

A síkbeli problémát tekintsünk: egy egyenes metsz-e egy téglalapot? Ezta problémát sokféle hatékony módon meg lehet oldani, amire a késobbiek-ben még látunk módszert (pl. az effektív sugár módszerét az 53. oldalon).Az alábbiakban leírt módszer a térbeli problémára is általánosítható, sot atéglatesttol általánosabban tetszoleges paralelepipedonra is muködik.

Az X0X1 egyenest paraméterezve adjuk meg:

X = X0 + t(X1 − X0).

Ha az elobbi parametrizált eloállítást az X mozgó pont mozgását leíróegyenletnek fogjuk fel, ahol t az ido, akkor a kérdés az, hogy van-e olyanidopont, hogy X mindkét sávon belül van. Ha X1 − X0 nem párhuzamos

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 38: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria38

ABC

D

X0

X1

t1

t2

13. ábra. Sugár és sáv keresztezése: az X0-ból induló X1 − X0 sebességgelmozgó pont t1 idopontban lép be a sávba és t2 idopontban lép ki.

a téglalap oldalaival, akkor a mozgó pont mindkét sávba belép és mindkétsávból kilép. Ha az [a1, a2] idointervallumot tölti az egyik sávban, a [b1, b2]intervallumot a másik sávban. A kérdés, hogy a két intervallum kölcsönöshelyzete milyen. A két intervallum diszjunkt, ha egyik intervallum teljesena másik valamelyik oldalán van, azaz

a2 < b1 vagy b2 < a1.

Tagadással kapjuk, hogy van olyan idopont, hogy X mindkét sávban bennevan, ha

a2 ≥ b1 és b2 ≥ a1.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 39: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

5

L I N E Á R I S T R A N S Z F O R M Á C I Ó K

Geometriai transzformáción a sík vagy a tér kölcsönösen egyértelmu leké-pezését értjük a síkra vagy térre. Vagyis

• a leképezés értelmezési tartománya a sík vagy a tér

• a leképezés céltere megegyezik az értelmezési tartománnyal

• különbözo pontoknak különbözo a képe

• minden pont valamely pontnak a képe.

5.1 egyenestartó transzformációk mátrix alakja

Ezek közül a transzformációk közül is ebben a tananyagban csak az egye-nestartókkal foglalkozunk, vagyis egy egyenesre illeszkedo pontok képei isegy egyenesre illeszkednek, illetve egy egyenesre illeszkedo pontok oské-pei is egy egyenesre illeszkednek. Más szóval az egyenestartó transzfor-mációkat affin transzformációknak is nevezik. Az affin transzformációkataz olvasó feltehetoen már ismeri (pl. a [Kov11] vagy [Sza10] jegyzetekbol.)Az affin transzformációk mindig mátrix muveletek segítségével írhatók le:F : Rn → Rn akkor és csakis akkor affin, ha van olyan A ∈ GL(n) mátrix ésb ∈ Rn vektor, hogy

F(X) = AX + b. (5.1)

Röviden úgy is írhatjuk, hogy F = (A, b), és mivel (A, b) ∈ Rn×(n+I), F-remint mátrixra is tekinthetünk. A sík affin transzformációjánál (A, b) ∈ R2×3,a térben (A, b) ∈ R3×4. Az A mátrix a transzformáció lineáris része, b pedigaz eltoló vektora. (F(X) = X + b a b-vektorral történo eltolás – innen a név.)Az (5.1) képlet elég egyszeru, a transzformációk szorzása (egymás után valóelvégzése) viszont némi körültekintést igényel. Ha F = (A, b), G = (C, d) kétaffin transzformáció, akkor

(G ◦ F)(X) = C(AX + b) + d = (CA)X + (Cb + d), (5.2)

azaz(C, d) ◦ (A, b) = (CA, Cb + d). (5.3)

39

Page 40: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria40

Ebbol az észrevételbol az inverz transzformációra is következtethetünk:

(A, b)−1 = (A−1,−A−1b), (5.4)

ugyanis

(A, b) ◦ (A−1,−A−1b) = (AA−1,−A(A−1b) + b) = (I, 0)

(A−1,−A−1b) ◦ (A, b) = (A−1 A, A−1b− A−1b) = (I, 0).

Az (5.2) és (5.4) formulák ugyan nem bonyolultak, a lineáris résszel való szá-molás kézenfekvonek is tunik, az eltoló vektorokkal való számolás viszontkülön figyelmet (és külön algoritmust) igényel. Az egész számítást egyet-len mátrixszorzásra lehet egyszerusíteni, ha homogén koordinátákkal szá-molunk. (A homogén koordinátákra vonatkozóan ld. a 2.1. fejezetet.) (A, b)helyett térjünk át a (

A b0 1

)∈ GL(n + 1) (5.5)

mátrixra. (5.5)-ben a mátrixot tömb alakban írtuk fel, ahol nem minden az,aminek látszik, mert 0 ∈ Rn. Pl. a síkban, ha n = 2, b = (b1, b2) és A = (aij),akkor (

A b0 1

)=

a11 a12 b1a21 a22 b20 0 1

.

A tömb alakú mátrixok alkalmazásában az a jó, hogy az egyébként nem mát-rix szorzással elvégezheto leképezések (mint pl. (5.1)) mátrixok szorzásáraredukálhatók, pl. (5.1) esetében(

A b0 1

)(X1

)=

(AX + b

1

). (5.6)

(5.6)-ban a jobb oldali mátrixot a mátrixszorzás formális szabálya szerint(sor – oszlop kompozíció) kaptuk meg. Ennek az egyszerusítésnek azonbanára van, az X pont helyett a pont (X, 1)-el számoltunk , azaz a pont homo-gén koordinátáival. Hasonlóan, az eredmény (AX + b, 1), azaz a képponthomogén koordinátái. Az igazi nyeremény azonban a transzformációk szor-zásánál jelentkezik. (5.2) helyett mátrixszorzással számolhatunk:(

C d0 1

)(A b0 1

)=

(CA Cb + d0 1

), (5.7)

következésképpen (A b0 1

)−1

=

(A−1 −A−1b

0 1

).

A lényeg az, hogy megértsük, hogy a transzformációnak van lineáris részeés eltoló vektora. A programunkban aztán minden a transzformáció lineáris

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 41: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria41

részének és eltoló vektorának elhelyezésétol függ. Ha az (A, b) ∈ Rn×(n+1)

elrendezést választjuk, akkor a transzformációt a síkban 2× 3 típusú, a tér-ben 3× 4 típusú mátrixszal adjuk meg, nem kell homogén koordinátákkalszámolni, de a transzformációk szorzása komplikált ((5.3) szerint). Ha az(

A b0 1

)elrendezést választjuk, akkor a transzformációk szorzása mátrix-

szorzás, viszont homogén koordinátákkal kell számolni, 3× 3 típusú, illet-ve 4 × 4 típusú mátrixokkal. (Ezt a felírást nevezzük lineáris reprezentáció-nak.) A szerzo mindkettore látott már komoly példát. Ha valamilyen gra-fikus könyvtárat használunk, akkor annak a szabályát kell követni. Pl. azOpenGL könyvtár a „homogén koordinátás” módszert alkalmazza, a Post-Script nyelv a R2×3 = R6 típusú reprezentációt (csak síkban)1. Ha mindentmagunk írunk, akkor választani kell. A továbbiakban csak a lényegre, a li-neáris részre koncentrálunk. Az eltolást szorzással mindig be lehet építeni:(

A b0 1

)=

(I b0 1

)(A 00 1

)vagy (A, b) = (I, b) ◦ (A, I).

Az elobbi sorban I a megfelelo típusú egységmátrix.Példaként eloször a skálázást mutatjuk be térben. (Síkban értelem szeruen

módosítható a példa.) A transzformáció lineáris része

A =

sx 0 00 sy 00 0 sz

, sx, sy, sz 6= 0,

eltoló vektora pedig 0 vektor. A transzformáció hatását könnyen megértjük,ha az (1, 0, 0), (0, 1, 0), (0, 0, 1) vektorokra alkalmazzuk. A képek rendre (ld.14. ábrát)

(sx, 0, 0), (sy, 0, 0), (0, 0, sz).

A skálázás inverze szintén skálázás, a lineáris rész foátlójában(1/sx, 1/sy, 1/sz) áll.

Második példánk legyen a középpontos nyújtás (ld. (1.1)). A C centrumúλ arányú nyújtás lineáris része (1.1) alapján λI, eltoló vektora pedig C− λC.Azaz a transzformáció mátrix reprezentációja:(

λI C− λC0 1

).

Az inverz transzformáció lineáris része 1λ I, eltoló vektora

− 1λ

I(C− λC) = − 1λ

C + C,

1 Ok, PostScriptben általában nem írunk játékprogramot.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 42: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria42

14. ábra. Skálázás. A piros kocka oldalai egységnyi hosszúak. A kék téglatestoldalai a skálafaktoroknak megfeleloen sx, sy, sz.

azaz mátrix reprezentációja

(I λC− C0 1

).

További példákat találunk a feladatok között.

5.2 tükrözés

Tükrözzünk az (X − P) • w = 0 egyenletu egyenesre vagy síkra!(Ld. a 15. ábrát!) (w ∈ Rn = Rn×1 nem zéró vektor az egyenes/sík normál-vektora, P illeszkedik az egyenesre/síkra.) Ez a transzformáció nem más,mint az

X 7→ X− 2(X− P) • w‖w‖2 w = X− 2

X • w‖w‖2 w + 2

P • w‖w‖2 w

leképezés. Ennek a transzformációnak az eltoló vektora a

2P • w‖w‖2 w ∈ Rn

vektor, míg lineáris része az

X 7→ X− 2X • w‖w‖2 w

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 43: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria43

((X−P)•w)‖w‖2 w

P

X

w

X′

15. ábra. Tükrözés egyenesre

leképezés, amely X 7→ HwX mátrix szorzással is megadható (Hw ∈ Rn×n).Hw lineáris algebrai módszerekkel azonnal kiszámítható:

Hw = I − 2w · wt

w • w∈ Rn×n, (5.8)

ahol I az n × n típusú egységmátrix. (Az ilyen módon megadott mátrixotHouseholder-mátrixnak nevezzük.)

Példaként kiszámítjuk az egyenesre vonatkozó síkbeli tükrözés lineárisreprezentációját. (5.8) második tagjának számlálója w = (A, B) esetén:(

AB

)(A, B) =

(A2 ABBA B2

),

míg a nevezo A2 + B2. Így a mátrix:

Hw =

(1− 2 A2

A2+B2 −2 ABA2+B2

−2 ABA2+B2 1− 2 B2

A2+B2

)=

(B2−A2

A2+B2−2ABA2+B2

−2ABA2+B2

A2−B2

A2+B2

).

Ha P = (x0, y0), akkor az eltoló vektor(2(x0 A2 + y0 AB)

A2 + B2 ,2(x0 AB + y0B2)

A2 + B2

).

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 44: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria44

Így a transzformáció lineáris reprezentációjaB2−A2

A2+B2−2ABA2+B2

2(x0 A2+y0 AB)A2+B2

−2ABA2+B2

A2−B2

A2+B22(x0 AB+y0B2)

A2+B2

0 0 1

.

Mivel w-nek csak az iránya lényeges, A 6= 0 esetén át szokás térni a w-velpárhuzamos (1, B/A) = (1, D)) vektorra, ekkor a mátrix elemek egyszeru-södnek, például a Housholder-mátrix alakja

H(1,D) =

(D2−1D2+1

−2DD2+1

−2DD2+1

1−D2

D2+1

).

Alkalmazásként vizsgáljunk egy gyakran eloforduló problémát. Olyanmozgást (irányítástartó egybevágóságot) kell konstruálni, amely egy dobozt(téglalapot vagy téglatestet) „irányba állít”, azaz a transzformált doboz ol-dalirányai a koordinátatengelyek irányai legyenek. Kezdjük a síkbeli esettel.A téglalap nem párhuzamos oldalvektorai legyenek a, és b továbbá (a, b)pozitív irányítású legyen, azaz det(a, b) > 0. Legyen i = (1, 0, ), j = (0, 1).Ha i � a (i és a párhuzamosak és egyirányúak), akkor készen vagyunk.Egyébként legyen w = a− ‖a‖i. Ekkor

a′ = a− 2w • aw • w

w =

= a− 2‖a‖2 − a1‖a‖

‖a‖2 − 2a1‖a‖+ ‖a‖2 (a− ‖a‖i) =

= a− (a− ‖a‖i) = ‖a‖i.

Mivel a tükrözés a merolegességet megtartja b′ meroleges lesz i-re, ugyan-akkor a tükrözés az irányítást megváltoztatja, ezért b′ ↑↓ j, vagyis még tük-rözni kell az x tengelyre. (Ez a tükrözés a′-t már nem változtatja.) Emlékez-tetoül, az x tengelyre vonatkozó tükrözés mátrixa(

1 00 −1

).

Térben a téglatest oldalvektorai legyenek a, b és c, továbbá (a, b, c) pozitívirányítású. Az elso lépés a síkbeli esethez analóg, ha i � a, akkor készenvagyunk, egyébként w = a− ‖a‖i. Ekkor a′ = ‖a‖i, b képe b′. Tudjuk, hogya′ ⊥ b′ (ezzel együtt i ⊥ b′), mert a és b is merolegesek voltak. Ha b′ �j, akkor tükröznünk kell még az xy síkra. (Ez a tükrözés a′-t és b′-t nemváltoztatja, a harmadik oldalt a pozitív orientációnak megfeleloen állítja be.)Egyébként legyen w = b′ − ‖b‖j. Hw · b′ = ‖b‖j. Könnyen látható, hogyHw · a′ = a′, hiszen i a tükrözés síkjában van:

(b′ − ‖b‖j • i = b′ • i = 0,

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 45: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria45

i ⊥ b′ miatt. Ha a két lépésben együttvéve csak egy tükrözésünk volt, ak-kor még a harmadik irány beállítása miatt tükrözzünk az xy síkra. Ennekmátrixa 1 0 0

0 1 00 0 −1

.

5.3 pont körüli forgatás síkban

Geometriailag a forgatást a síkban annak középpontja és szöge határozzameg. Ha az origó körül forgatunk, akkor a transzformáció lineáris (azazeltoló vektora zérus vektor). α szögu elforgatás2 esetén az X = (x, y) pontképe (

x′

y′

)=

(cos α − sin αsin α cos α

)︸ ︷︷ ︸

rot α

(xy

). (5.9)

Ha egy C centrum körül forgatunk α szöggel, akkor a transzformációlineáris része az (5.9)-ben szereplo forgatási mátrix, eltoló része pedigC− rot α · C:

X 7→ rot α · X + (C− rot α · C) (5.10)

Például, ha a C = (x0, y0) pont körül forgatunk, az eltoló vektor(x0y0

)−(

cos α − sin αsin α cos α

)(x0y0

)=

(x0(1− cos α) + y0 sin αy0(1− cos α)− x0 sin α

).

5.4 egyenes körüli elforgatás a térben

A források gazdagsága a probléma kiemelt fontosságára utal. Terjedelmesreceptek találhatók különbözo könyvekben és az interneten, a cél most az,hogy egy könnyen használható módszert adjunk.

Eloször olyan tengely körül forgassunk, mely áthalad az origón. Az egy-szeruség kedvéért a tengely irányvektora legyen egységvektor, s jelöljük eztaz egységvektort w-vel. A számításokban w = (a, b, c). A forgatás szögeα ∈ R. Ez a két adat még nem határozza meg egyértelmuen a forgatást, álla-podjunk meg abban, hogy a forgatást mindig a jobbkéz-szabálynak megfele-loen értjük, azaz a tengely irányával szembe nézve a forgatás az óramutatójárásával ellentétes. Az elforgatást ekkor az

R3 → R3, X 7→ cos α(X− w • X · w) + w • x · w + sin α(w× X) (5.11)

2 A forgatás iránya α elojelének megfeleloen értendo.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 46: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria46

összefüggés adja meg. Ha összevetjük (5.11)-et összefüggést (1.7)-tel, (1.9)-cel és (1.11)-gyel, akkor a forgatás felírható X 7→ RX aklakban az

R = cos α(1− wwt) + wwt + sin αW =

= cos α · 1 + sin αW + (1− cos α)wwt

mátrixszal, ahol

W =

0 −c bc 0 −a−b a 0

.

Mivel w egységvektor, azaz a2 + b2 + c2 = 1, közvetlen számolás mutatja,hogy W2 + I = wwt, így

R = I + sin αW + (1− cos α)W2. (5.12)

Ez elég egyszeru, igaz? Csak kicsit bonyolultabb a helyzet, ha a forgásten-gely nem megy át az origón. A tengely egy pontja legyen P0. A „TFT” (tol-forgat-tol) szabályt kell alkalmazni:

1. olyan eltolást alkalmazunk, hogy P0 az origóba kerüljön: X 7→ X− P0

2. forgatunk az (5.12) mátrixszal történo balszorzással

3. az elso eltolás inverzét alkalmazzuk.

VagyisX 7→ R(X− P0) + P0 = RX + (P0 − RP0). (5.13)

A transzformáció lineáris része R, eltoló vektora X0 − RX0. (Önmagában(5.13) és (5.10) teljesen analóg formulák.)

5.5 vetítés és a szelekció probléma

Ebben a fejezetben térbeli problémát tárgyalunk, ha a játékunk nem 3D-s,akkor átugorhatjuk.

Már végrehajtottuk az összes R3 → R3 transzformációt, most a térbelipontokat le kell vetítenünk a képernyore, vagy a képernyon nyitott ablak-ra. Nagyon fontos, hogy eloször egy absztrakt (vagy másképpen normalizált)képernyore vetítünk, ahol a koordináták csak a [−1, 1] intervallumban van-nak. (Ha három pixel × három pixeles képernyonk van, akkor vége is ,.)Ezután skálázunk a képernyo, vagy a megnyitott ablak geometriájának meg-feleloen. Ha a megnyitott ablak mérete (pixelben) w× h, az origó a bal felsosarokban van, a pozitív irányok pedig jobbra és lefele vannak, akkor azabsztrakt képernyorol az ablakba a

x′ =w2(x + 1)

y′ =h2(y + 1)

(5.14)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 47: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria47

transzformációval térünk át.

Centrális vetítés

Ebben a munkában csak centrális vetítésekkel foglalkozunk. Általánosana C ∈ R3 centrumból vetítünk a w normálvektorú, X0 ponton átmeno (X −X0) • w = 0 egyenletu síkra. A P pont vetületét jelölje P′, azaz valamelyt ∈ R-re P′ = C + t(P− C) kielégíti a sík egyenletét:

(C + t(P− C)− X0) • w = 0. (5.15)

Az (5.15) egyenletbol t kifejezheto:

t =(X0 − C) • w(P− C) • w

,

így visszahelyettesítve megkapjuk P′-t:

P′ = C +(X0 − C) • w(P− C) • w

(P− C). (5.16)

C, X0 és w választásától függoen különbözo speciális vetítéseket írhatunkfel. A következo példa egy gyakran alkalmazott vetítés típust ad meg.

Vetítsünk az origóból a z = −n (n > 0) síkra. Azaz az origóból vetítünka (0, 0, 1) normálvektorú, (0, 0,−n) ponton áthaladó síkra. (n a near– köze-li szóra utal, ennek logikáját a késobbiekben majd látni fogjuk.) Az (5.16)egyenletbe behelyettesítve

P′ = −nz

P,

vagy részletesen:

x′ = −nxz

(5.17)

y′ = −nyz

(5.18)

z′ = −n = −nzz

. (5.19)

Mivel a vetítés alakja közös nevezoju lineáris törtfüggvény, kézenfekvo át-térni homogén koordinátákra:

x′1 = nx

x′2 = ny

x′3 = nz

x′4 = −z,

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 48: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria48

és x′ = x′1/x′4, y′ = x′2/x′4. A vetítés mátrix alakban tehátx′1x′2x′3x′4

=

n 0 0 00 n 0 00 0 n 00 0 −1 0

xyz1

Most bevezetjük az ún. normalizált vetítést. A vetítési transzformációról

eloírjuk, hogy a képsík

conv{(l, b), (l, t), (r, t), (r, b)}

téglalapja a [−1, 1]× [−1, 1] négyzetbe transzformálódjon egyenestartó (af-fin) transzformációval. (l, r, t, b > 0, a betuk a left – bal, right – jobb, top –fenn, bottom – lenn szavakra utalnak.) Egyszeruen látható, hogy ehhez (aképsík Descartes-koordinátarendszerében) az

x′ = 2x

r− l− r + l

r− l

y′ = 2y

t− b− t + b

t− b

transzformációt kell végrehajtani. Az elso koordinátára beírva a vetítéskorkapott értéket az (5.17) formulából:

x′ = 2nx−z

r− l− r + l

r− l=

2 nr−l x + r+l

r−l z−z

.

Hasonlóan a második koordinátára:

y′ = 2nx−z

t− b− t + b

t− b=

2 nt−b y + t+b

t−b z−z

.

Homogén koordinátákkal mátrix alakbanx′1x′2x′3x′4

=

2nr−l 0 r+l

r−l 00 2n

t−bt+bt−b 0

0 0 n 00 0 −1 0

xyz1

.

A vetületi pont koordinátáit x′ = x′1/x′4, y′ = x′2/x′4 adja. z′ = x′3/x′4 eredmé-nye minden pontra−n. Mivel x′3-t a vetületi pont koordinátái kiszámításánálnem használjuk, a vetítési mátrix harmadik sorát úgy módosítjuk, hogy azábrázolásnál nem használt z′ = x′3/x′4 koordináta kódolja az eredeti ponttérbeli harmadik koordinátáját. z′ nem függhet x-tol és y-tól, így a mátrixalakja

2nr−l 0 r+l

r−l 00 2n

t−bt+bt−b 0

0 0 A B0 0 −1 0

.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 49: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria49

Bennünket most csak x′3 és x′4 érdekel:

x′3 = Az + B

x′4 = −z,

azazz′ = −A− B

z.

Itt is normalizáljunk, a térbeli [−n,− f ] koordináták képe [−1, 1] legyen.( f > 0, jelentése far – távoli. A normalizálás tehát most azt jelenti, hogya közeli és távoli síkok közötti pontok vetületének harmadik koordinátája−1 és 1 közé essen.) Tehát z = −n-re z′ = −1; z = − f -re z′ = 1. Így azalábbi egyenletrendszert kapjuk:

f = −A f + B

−n = −An + B.

Az egyenletrendszert megoldva,

A =f + nn− f

, B =2 f n

n− f.

A vetítési mátrix tehát

V =

2nr−l 0 r+l

r−l 00 2n

t−bt+bt−b 0

0 0 f+nn− f

2 f nn− f

0 0 −1 0

. (5.20)

A normalizált képernyon tehát az (x, y, z) ∈ R3 térbeli pont vetületénekkoordinátáit az alábbi séma szerint kapjuk:

(x, y, z) 7→ V(x, y, z, 1)t = (x1, x2, x3, x4)t 7→

(x1

x4,

x2

x4,

x3

x4

)t.

A normalizált képernyon (x1

x4,

x2

x4

)egy pont (amit az (x, y, z) pont színével kivilágítunk), az x3/x4 koordinátáta képernyo az ún. z-tárban orzi.

Az (5.20) mátrix pontosan az OpenGL centrális vetítéshez használt mátrixa.

A szelekció probléma

A képernyon egy 3D jelenet van. Egér kattintással szeretnénk az egyikobjektumot kijelölni, lényegében a vetítést szeretnénk invertálni. Ha z-tárat

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 50: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria50

nem alkalmazunk, akkor a vetítés nem invertálható, a vetítés centrumát aképernyon kijelölt ponttal összekötve a térbeli pont irányát kaphatjuk csakmeg. z-tár alkalmazása esetén azonban a vetítés invertálható lesz, az (5.20)mátrix invertálhatósága miatt.

Az egyszeruség kedvéért csak a normalizált képernyovel (pontosabbanz-tárral ellátott normalizált képernyovel) dolgozunk, a valóságban eloszöraz (5.14) leképezést is invertálni kell.

(5.20) inverzének meghatározásához a mátrix szorzás elvégzésével ellen-orizheto, hogy ha a megfelelo mátrix elemek nem nullák, akkor

a11 0 a13 00 a22 a23 00 0 a33 a340 0 −1 0

−1

=

1

a110 0 a13

a11

0 1a22

0 a23a22

0 0 0 −10 0 1

a34

a33a34

,

így

V−1 =

2nr−l 0 r+l

r−l 00 2n

t−bt+bt−b 0

0 0 f+nn− f

2 f nn− f

0 0 −1 0

−1

=

r−l2n 0 0 r+l

2n0 t−b

2n 0 t+b2n

0 0 0 −10 0 n− f

2 f nf+n2 f n

.

A képernyon a (X, Y, Z) vetületi pont kijelölésével megkapjuk a térbeli ospontot homogén koordinátákkal

V−1(X, Y, Z, 1)t = (x1, x2, x3, x4),

ahonnan

P =

(x1

x4,

x2

x4,

x3

x4,)

a keresett pont.Ezután még azt is el kell dönteni, hogy a pont melyik alakzathoz tartozik.

A gömbök tesztelése egyszeru, P akkor és csakis akkor az M középpontú,r sugarú gömb pontja, ha ‖M − P‖2 = r2. (Az ilyen tesztet természetesenmindig egy hibát megengedve kell elvégezni. Azt is megfigyelhetjük, hogyszokásos módon nem a távolságot, hanem a négyzetét teszteljük a gyök-vonást elkerülendo.) A pont és doboz helyzetének eldöntését is ismerjük,ld. a 2.4. szakaszt.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 51: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

6TÁV O L S Á G O K K I S Z Á M Í TÁ S A É S Ü T K Ö Z É S E KD E T E K TÁ L Á S A

„Nagy csattanások, brutális ütközések” – sokan ezért szeretik a játékprog-ramokat. Az ütközések detektálásának alapja a távolságok számítása.

A távolságok meghatározásának alapja, hogy

• meg tudjuk határozni két pont távolságát

• meg tudjuk határozni egy vektor adott irányra vonatkozó merolegesvetületének hosszát.

Mindkét kérdéssel foglalkoztunk az 1. fejezetben.

6.1 pont és sík távolsága

Legyen (X − X0) • n = 0 egy sík egyenlete, tehát a sík az X0 pontra il-leszkedik és normálvektora n. Határozzuk meg egy teszoleges P pontnak atávolságát ettol a síktól! A keresett érték nem más, mint a P− X0 vektor nirányára vonatkozó vetületének hossza:

d =|(P− X0) • n|

‖n‖ . (6.1)

Érdemes megjegyezni, hogy (6.1) számlálójában az abszolút értéket elhagy-va tesztelni tudjuk, hogy két pontot a sík elválaszt-e. Tegyük fel, hogy apontok nincsenek a síkon.

sgn(P− X0) • n = sgn(Q− X0) • n =⇒ P-t és Q-t S nem választja el

sgn(P− X0) • n 6= sgn(Q− X0) • n =⇒ P-t és Q-t S elválasztja.

Gömb és sík kölcsönös helyzete

A játékunkban egy labda (billiárdgolyó) mozog, a mozgás folyamán tesz-telnünk kell, hogy elér-e a labda egy falat? Azt kell meghatározni, hogy

51

Page 52: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria52

egy középpontjával és sugarával adott gömb és egy sík távolsága mennyi.A probléma egyszeruen visszavezetheto a középpont és a sík távolságára.Jelölje a gömb középpontját C, sugarát R, a síkot S! d(C, S) a középpont ésa sík távolsága. Tehát a keresett távolság

d =

{d(C, S)− R, ha d(C, S)− R > 00, ha d(C, S)− R ≤ 0.

(6.2)

6.2 pont és egyenes távolsága

A pontból az egyenesre bocsátott meroleges szakasz hosszát kell kiszá-mítani. A módszer négyzetgyök vonást is használ, így ha csak távolságokösszehasonlítása a cél, akkor a távolságok helyett elegendo a négyzeteiketösszehasonlítani, elkerülve a „drága” gyökvonást.

Legyen az adott pont P ∈ R3, az egyenes pedig X0X1 (16. Ábra). A P−X0

P

X0

X1

P′

16. ábra. Pont és egyenes távolsága

vektor egyenesre vonatkozó meroleges vetületének hossza

(P− X0) • (X1 − X0)

‖X1 − X0‖,

így Pitagorasz tételébol a távolság négyzete

d2 = ‖P− X0‖2 − ((P− X0) • (X1 − X0))2

‖X1 − X0‖2 . (6.3)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 53: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria53

(6.3)-ból egyszeru átalakítással más formában is megadhatjuk az eredményt:

d2 =‖(X1 − X0)× (P− X0)‖2

‖X1 − X0‖2 .

6.3 két egyenes távolsága

Legyen az egyik egyenes X0X1, míg a másik egyenes Y0Y1. Távolságuknem más, mint annak a szakasznak a hossza, amely mindkét egyenesremeroleges. Ha az egyenesek párhuzamosak, akkor ez a szakasz nem egy-értelmu, és ekkor az egyik egyenesen felvett tetszoleges pontnak a másikegyenestol mért távolságát kell meghatározni. Egyébként a mindkét egye-nesre meroleges szakasz egyértelmu. Ha történetesen az egyenesek metszikegymást, akkor az elobbi szakasz „elfajuló”, azaz egyetlen pontból áll. Fog-lalkozzunk a nem párhuzamos egyenesek kérdésével. Mindkét egyenesremeroleges vektort

n = (X1 − X0)× (Y1 −Y0)

ad. Erre az irányra kell az Y0 − X0 vektort merolegesen vetíteni. Így

d =|(Y0 − X0) • n|

‖n‖ . (6.4)

6.4 doboz és sík távolsága

Ha a doboz minden csúcsa a sík egyik oldalán van (de nem a síkon), akkora csúcsok távolságainak minimuma adja a doboz és a sík távolságát. Ha adoboznak vannak a síkon csúcsai, vagy a sík csúcsokat választ el, akkor atávolság 0. Ha a sík egyenlete (X − X0) • n = 0 és n egységvektor, akkora P pont elojeles távolsága a síktól (P − X0) • n. Tehát eloször mindegyikcsúcsra kiszámítjuk a csúcs elojeles távolságát a síktól. Ha a nyolc számközött van zérus, vagy két ellentétes elojelu, akkor a keresett távolság 0.Ellenkezo esetben

d = min{|(Pi − X0) • n| | i = 0, . . . 7},

ahol P0, . . . , P7 jelöli a csúcsokat.Második módszerként megismerünk egy nagyon fontos koncepciót hasz-

náló, kevesebb skaláris szorzás elvégzésével járó eljárást. Eloször vizsgáljunksíkbeli dobozt, azaz téglalapot, illetve téglalap és egyenes kölcsönös helyze-tét! A 17. ábrán a téglalap középpontja C, a fél oldalvektorok u és v (azaza téglalap csúcsai C± u± v); míg az egyenest S jelöli. A cél, hogy (6.5)-hözhasonló, egyszeru eljárást kapjunk. Ehhez egy nagyon fontos koncepciótkell megismernünk, a doboz effektív sugarát. Az effektív sugár mindig egy

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 54: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria54

re

C

S

uv

P

n

C′

v

17. ábra. Doboz effektív sugara

irányra vonatkozik. Ha az irányt az n egységvektor adja meg, és a dobozfél-odalvektorai u és v, akkor a doboz effektív sugara

re = |u • n|+ |v • n|.

A 17. ábrán láthatjuk, hogy az effektív sugár kétszerese megadja a téglalap-nak egy n irányú egyenesre vonatkozó árnyékának hosszát, ha a vetítés n-remeroleges irányú. (Az ábrán a vetítés irányát jelzik a szaggatott vonalak. Mi-vel az ábrán n az S egyenes egy normálvektora, a vetítési irány párhuzamosS-el.) Ezek után a téglalap és az S távolsága megállapítható a C középpontú,re sugarú körlemez és S távolságából. (Az ábrán az n irányú egyenes akárát is mehet C-n, s akkor C = C′.) Azaz

d =

{d(C, S)− re, ha d(C, S)− re > 00, ha d(C, S)− re ≤ 0.

(6.5)

Az elobbieket nagyon könnyu kiterjeszteni térbe. Ha egy téglatest fél él-vektorai u, v és w; n pedig egy egységvektor, akkor a téglatest effektív sugaran irányára vonatkozóan

re = |u • n|+ |v • n|+ |w • n|. (6.6)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 55: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria55

Ha a téglatest középpontja C (azaz a csúcsok C ± u± v± w), az S sík nor-mál egységvektora pedig n, akkor a téglatest és a sík távolsága egyenlo a Cközéppontú, re sugarú gömb és S távolságával, ahol re a (6.6)-tal van adva.

6.5 gömb távolsága doboztól

Doboz alatt síkban téglalapot, térbe téglatestet értünk, ez lehet egy bonyo-lultabb formát körülölelo doboz is.

Eloször egy egyszeru egy-dimenziós problémát tanulmányozunk: mennyia számegyenes u ∈ R pontjának távolsága a [−a, a] intervallumtól (a > 0)?Egyszeru megfontolás mutatja, hogy a távolság

d1(u, [−a, a]) = max{0, u− a,−u− a}.

Ugyanis u > a esetben u− a > 0, −u− a < 0, tehát

max{0, u− a,−u− a} = u− a,

ami valóban megegyezik a pont és az intervallum távolságával. −a ≤ u ≤ aesetén a távolság természetesen nulla, és valóban, u − a < 0, −u − a < 0miatt ez megegyezik max{0, u− a,−u− a} = 0 értékével. Hasonlóan, u <−a esetén 0, u− a, −u− a közül csak −u− a pozitív, és ez a pozitív értékvalóban megegyezik a pont és az intervallum távolságával.

Két-dimenzióban hasonlóan adhatunk választ arra a kérdésre, hogymennyi egy u = (u1, u1) ∈ R2 pont távolsága a T0 = [−a, a]× [−b, b] tégla-laptól:

d2(u, T) = d21(u1, [−a, a]) + d2

1(u2, [−b, b]) =

= max 2{0, u1 − a,−u1 − a}+ max 2{0, u2 − b,−u2 − b}.

A probléma általában ettol bonyolultabb, mert a téglalap nem feltétlenül azelobbi „szabályos” pozícióban van. (Ti. a középpont az elobbiekben az origó,a téglalap oldalai a koordináta-tengelyekkel párhuzamosak.) Valójában az ál-talános esetet nagyon könnyu visszavezetni erre az egyszeru esetre. Ha azelobbi T0 téglalappal egybevágó T téglalap a T0-ból az (A, v) mozgással szár-mazik, akkor az (A, v)−1 inverz mozgás T-t T0-ba, u-t egy u′ = (A, v)−1upontba viszi, azaz u′ és T0 helyzetét kell vizsgálni az elobbi módon. Ezt az„irányba állító” mozgást a 44. oldalon tanultuk.

Ezek után könnyen általánosítható, hogy a térbeli problémánál a B =[−a, a] × [−b,−b] × [−c, c] „szabályos elhelyezkedésu” doboz és az u =(u1, u2, u3) pont távolsága

d2(u, B) = d21(u1, [−a, a]) + d2

1(u2, [−b, b]) + d21(u3, [−c, c]).

A B doboz és az u középpontú r sugarú gömb ütközik, ha d(u, B) = r.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 56: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria56szeparáló egyenes

18. ábra. Két nem átfedo téglalap szeparáló egyenese

6.6 doboz távolsága doboztól

A doboz-doboz ütközés detektálását inkább az elkerülés detektálására le-het visszavezetni. Térben két doboz nem átfedo, ha síkkal szeparálni lehetazokat, azaz tudunk olyan síkot állítani, amelynek az egyik doboz az egyikoldalán, a mások doboz a másik oldalán van. Síkban két téglalap nem átfedo,ha egyenesekkel szeparálhatók. Ha van szeparáló sík (egyenes), akkor a do-bozok síkra (egyenesre) meroleges egyenesre vonatkozó meroleges vetületeinem átfedo szakaszok, ld. 18. ábra. A szeparáló síkra (egyenesre) merolegesegyenest nevezzük a továbbiakban szeparáló tengelynek.

Három kérdést kell megválaszolnunk a továbbiakban:

1. Hogyan határozzuk meg egy doboz vetületét egy egyenesre?

2. A számegyenesen két intervallum átfedését hogyan állapítjuk meg?

3. Hogyan választjuk ki azokat az irányokat, amelyekre vetítve az elkerüléstmegállapíthatjuk.

Hogyan határozzuk meg egy doboz vetületét egy egyenesre?

Ha az adott egyenes az X0X1 egyenes, akkor a P pont meroleges vetülete

P′ = X0 +(P− X0) • (X1 − X0)

‖X1 − X0‖2 (X1 − X0).

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 57: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria57

Az egyenest most koordinátázzuk olyan módon, hogy a zérus pont X0 le-gyen (másképpen fogalmazva, feltehetjük, hogy az egyenes átmegy az ori-gón), az egység-pont pedig X1. P′ koordinátája a számegyenesen megmutat-ja, hogy (P′ − X0) = P′ hányszorosa (X1 − X0) = X1-nek, azaz P vetületé-nek koordinátája

P • X1

‖X1‖2 .

Mivel ‖X1‖2 minden P-re ugyanaz a pozitív szám, és csak a koordinátákközötti kisebb-nagyobb reláció megállapítására van szükség, elegendo azelobbi kifejezés számlálóját használni koordinátaként:

P • X1.

Ha a doboz mindegyik csúcsát vetítjük az egyenesre, akkor a legkisebb és alegnagyobb koordináták adják a vetületi intervallum határait.

A számegyenesen két intervallum átfedését hogyan állapítjuk meg?

Egy I1 = [amin, amax] és I2 = [bmin, bmax] akkor és csakis akkor nem átfedo,ha I2 az I1-tol jobbra van, vagy balra van:

amax < bmin vagy bmax < amin

Hogyan választjuk ki azokat az irányokat, amelyekre vetítve az elkerülést megálla-píthatjuk.

A legegyszerubb teszt, ha a dobozoknak a koordináta-tengelyekre vo-natkozó meroleges vetületeinek átfedését vizsgáljuk. Egy adott irányban,mondjuk az x-tengely irányában egy doboz meroleges vetületét úgy határoz-zuk meg, hogy vesszük a csúcsok elso koordinátáinak minimumát és maxi-mumát, ez a két érték határozza meg a vetületi intervallumot. (Tulajdonkép-pen a problémát olyan keretezo dobozok átfedésének vizsgálatára vezettükvissza, melynek élei a koordináta-tengelyek irányába esnek. Az ilyen kerete-zo dobozt Bounding Boxnak nevezik. Általánosan, a Bounding Box úgy tar-talmazza az alakzatot, hogy a doboz élei a koordináta-tengelyekkel párhu-zamosak.) Ha a Bounding Boxok nem átfedoek, akkor a két eredeti alakzatsem átfedo, de fordítva már nem igaz: a Bounding Boxok lehetnek átfedo-ek úgy, hogy az alakzatok nem átfedoek. (Ismeros? A játékban úgy látszik,hogy elkerültük az ütközést, de a program mégis robbanást produkál. Ezazért lehet, mert a program az alakzattól általában bovebb keretezo dobo-zok ütközését figyelte.) Ha precízebb ütközés detektálást akarunk, a kerete-zo dobozok ütközését akkor is célszeru elozetes tesztként elvégezni, annakgyorsasága miatt.

A síkban be lehet látni, hogy ha két téglalap nem átfedo, akkor van olyanszeparáló egyenes, mely az egyik téglalap valamelyik oldalával párhuza-

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 58: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria58

19. ábra. Az élirányok tesztelése nem elegendo

mos. Így elegendo a dobozok meroleges vetületét olyan egyenesekre képez-ni, amelyek iránya megegyezik a dobozok oldalainak irányával, tehát össze-sen négy egyenesre vonatkozóan vizsgáljuk a meroleges vetületek átfedését.Ha az oldalirányokra vonatkozó vetületi intervallumok nem átfedoek, akkor a tégla-lapok biztosan nem átfedoek.

Az analóg térbeli tétel az lenne, hogy elegendo a dobozok éleinek irányát,tehát hat irányt vizsgálni, azonban ez az állítás már nem igaz. (Ld. 19. ábra!)

Sokkal több irányra, összesen tizenöt irányra van szükség. A térben a do-bozok három-három éle legyen (a1, b1, c1) és (a2, b2, c2). Be lehet látni, hogya vizsgálandó irányok

a1, b1, c1, a2, b2, c2,

a1 × a2, a1 × b2, a1 × c2,

b1 × a2, b1 × b2, b1 × c2,

c1 × a2, c1 × b2, c1 × c2.

Ha az eloforduló vektoriális szorzatok valamelyike zérus, azaz a dobozokegy-egy éle párhuzamos, akkor a vektoriális szorzat nem határoz meg irányt.Ha az élirányokra, valamint a (nem párhuzamos) élpárokra meroleges irányokra vo-natkozó vetületi intervallumok nem átfedoek, akkor a dobozok biztosan nem átfedoek.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 59: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria59

6.7 mozgó gömbök ütközése

Most az ütközési problémába bevezetjük az idot, mint paramétert. Ha egy-egy pont egyenesek mentén mozog, az egyenesek lehetnek ugyan metszok,de a mozgó pontok elkerülhetik egymást, mert az ütközéshez egyszerre kella metszésponthoz érni.

A mozgó gömbök ütközésének feladatát vizsgáljuk egy egyszeru esetben.Ez a probléma geometriailag könnyen kezelheto, mert az ütközési pont aközéppontokat összeköto szakaszon jön létre, így csak a középpontok távol-ságát kell figyelni.

Síkban kör-kör, térben gömb-gömb ütközése minden szempontból analógprobléma. Itt a térbeli esetet írjuk le, minden nehézség nélkül lehet alkal-mazni a síkban is.

A gömbök középpontjainak mozgását a térben írják le az

u : I1 → R3, t 7→ u(t)

ésv : I1 → R3, t 7→ v(t)

vektor értéku leképezések. A t paraméter az idot jelenti, I1 és I2 a szóba jövoido intervallumot. Tehát egy t idopontban a gömbök középpontjai a térbenu(t) és v(t).

A gömbök sugarai legyenek r és R. A gömbök középpontjainak távolságaaz ido függvényében

d(t) = ‖u(t)− v(t)‖ =√(u(t)− v(t)) • (u(t)− v(t)).

Ha van olyan idopont, hogy

d(t) = R + r,

akkor a gömbök ütköznek, egyébként elkerülik egymást. A négyzetgyökvonást elkerülve, az

(u(t)− v(t)) • (u(t)− v(t)) = (R + r)2

egyenletet kell megoldani, az egyenlet megoldása szolgáltatja az ütközésidopontját. A problémát általában csak numerikusan lehet kezelni, emelletta t értékére ésszeru feltételeket szabhatunk, pl. negatív ido nem jöhet szó-ba. Több (pozitív) megoldás közül a legkisebb megoldás adja az ütközésidopontját: ha a gömbök egyszer már ütköztek, akkor a további ütközésneknincs jelentosége. Megjegyezzük, hogy ha mozgások pályáját eleve valami-lyen fizikai elv alapján számoljuk, pl. egy differenciálegyenlet numerikusmegoldásával, akkor u(t) és v(t) értékét valamilyen t0, t0 + ∆t, . . . , t0 + N∆t

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 60: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria60

idopontokban ismerjük, és ekkor az ütközést minden idopontban tesztelnilehet. Az ütközés feltétele, hogy

‖u(t + k∆t)− v(t + ∆t)‖2 ≤ (R + r)2,

és ütközés esetén a mozgás számítását már nem kell tovább folytatni.Mindig fontos lehet egy probléma megoldásánál, ha a numerikus megol-

dás helyett zárt formulát tudunk az eredményre adni, ez növeli a számításpontosságát. (A numerikus megoldások egymásba ágyazott lépései a koráb-bi lépések numerikus hibáit tovább ronthatják.)

A legegyszerubb problémát tanulmányozzuk: egyenesvonalú egyenletesmozgást végzo gömbök ütközését. Legyenek a pályák

u(t) = X0 + t(X1 − X0)

v(t) = Y0 + t(Y1 −Y0),

tehát t = 0 idopontban a gömbök középpontjai az X0, illetve Y0 helyenvannak, a t = 1 idopontban a megfelelo helyek X1 és Y1. Ésszeru feltételezés,hogy

‖X0 −Y0‖ > R + r.

Vezessük be az a = X0 −Y0 és b = (X1 −Y1)− a új ismeretleneket. Ekkor

d2 = (a + bt) • (a + bt) = (6.7)

= (b • b)t2 + 2(a • b)t + a • a.

Ha b = 0, akkor a probléma lényegesen leegyszerusödik. Geometriailagekkor a mozgások pályái párhuzamosak, vagy egybe is eshetnek, mert azegyenesek irányvektorai párhuzamosak, továbbá a mozgások azonos sebes-séguek:

b = 0 ⇐⇒ X1 −Y1 = X0 −Y0 ⇐⇒ X1 − X0 = Y1 −Y0.

A testek távolsága állandó lesz, d = ‖a‖ > R + r, így nem fognak ütközni.A b 6= 0 esetet vizsgáljuk. Eloször végezzünk el egy egyszeru tesztet. A

távolságnégyzet minimuma ott lehet, ahol a d2 függvény t-szerinti deriváltja0.

d2′ = 2tb • b + 2a • b,

azaz d2′ = 0, ha

t = − a • bb • b

.

Visszahelyettesítve (6.7)-be:

d2min = a • a− (a • b)2

b • b. (6.8)

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 61: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

Játékgeometria61

Tehát az ütközés biztosan nem jön létre, ha

a • a− (a • b)2

b • b> (R + r)2.

Ha lesz ütközés, akkor az ütközés idopontját a d2 = (R + r)2 egyenlet meg-oldása adja. Másodfokú egyenletet kell megoldanunk:

t =−a • b±

√(a • b)2 − b • b(a • a− (R + r)2)

b • b. (6.9)

Negatív t érték nem jöhet szóba (ez azt jelentené, hogy a mozgás kezdeteelott ütköznének a testek), két pozitív érték esetén a korábbi idopontot kellfigyelembe venni.

Az oktatási segédanyag a „Mobil alkalmazásfejlesztés az informatikaitudás innovatív alkalmazásával” címu, TÁMOP-2.2.4-11/1-2012-0055kódszámú projekt keretében valósult meg.

Page 62: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

I R O D A L O M J E G Y Z É K

[Bla11] István Blahota. Kalkulus és Maxima. TÁMOP-4.1.2-08/1/A, 2011.

[Fol96] J.D. Foley. Computer Graphics: Principles and Practice, Second Editionin C. Addison-Wesley Systems Programming Series. Addison-Wesley Pub, 1996.

[GVL13] Gene H. Golub and Charles F. Van Loan. Matrix computations.Johns Hopkins Studies in the Mathematical Sciences. Johns Hop-kins University Press, Baltimore, MD, fourth edition, 2013.

[Kov11] Zoltán Kovács. Számítógépi geometria. Kelet-MagyarországiInformatika Tananyag Tárház, 2011. Online elérheto: ze-us.nyf.hu/˜kovacsz.

[PS85] Franco P. Preparata and Michael Ian Shamos. Computational geo-metry. Texts and Monographs in Computer Science. Springer-Verlag, New York, 1985. An introduction.

[PTVF07] William H. Press, Saul A. Teukolsky, William T. Vetterling, andBrian P. Flannery. Numerical recipes. Cambridge University Press,Cambridge, third edition, 2007. The art of scientific computing.

[RA90] David Rogers and J. Alan Adams. Mathematical Elements for Com-puter Graphics. McGraw-Hill, second edition, 1990.

[Sza03] László Szabó. Kombinatorikus geometria és geometriai algoritmusok.Polygon könyvtár. Polygon, 2003.

[Sza10] József Szabó. A számítógépi grafika elemei. Debreceni EgyetemiKiadó, 2010.

[Tre04] Christopher Tremblay. Mathematics for Game Developers. ThomsonCourse Technology/Premier Press, 2004.

62

Page 63: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

J E L M A G YA R Á Z AT

Az elofordulás sorrendjében:

• Rn – a valós rendezett szám n-esek tere

• u • v – az u és v vektorok skaláris szorzata

• ‖u‖ – az u vektor hossza

• u× v – az u és v vektorok vektoriális szorzata

• Rm×n – a valós elemu m× n típusú mátrixok halmaza

• At – az A mátrix transzponáltja

• det A vagy |A| – az A négyzetes mátrix determinánsa

• GL(n) az n× n típusú nem zéró determinánsú mátrixok csoportja

• LA – az A mátrixszal történo balszorzás, mint lineáris transzformáció

63

Page 64: Játékgeometriazeus.nyf.hu/~ kovacsz/game_revised.pdf · 5.3. Pont körüli forgatás síkban 45 5.4. Egyenes körüli elforgatás a térben 45 5.5. Vetítés és a szelekció probléma

TÁ R G Y M U TAT Ó

z-tár, 48

általános lineáris csoport, 11

affin transzformáció, 38

baricentrikus koordináta, 22

centrális vetítés, 46

Cramer-szabály, 13

doboz, 20

egyenes és sík metszéspontja, 33

egyenes egyenlete síkban, 17

egyenes paraméteres eloállítása,17

extremális pont, 23, 29

félegyenes paraméteres eloállítá-sa, 17

forgatás, 44

háromszög lemez, 22

homogén koordináták, 16

Householder-mátrix, 42

inverz, 39

Jarvis-algoritmus, 28

közös pontra illeszkedo háromsík, 33

konvex burok, 23, 28

lineáris egyenletrendszer, 13

lineáris leképezés, 11

lineáris reprezentáció, 43

mátrix, 8

meroleges vetület, 12

pont, 15

sík paraméteres eloállítása, 22

sáv, 20

skaláris szorzás, 6

szám-vektor szorzás, 6

szakasz paraméteres eloállítása,17

szelekció, 49

tükrözés, 41

vegyes szorzás, 10

vektor, 5

vektor hossza, 6

vektoriális szorzás, 7

vektorok szöge, 7

64