Taško afininių koordinačių transformacija keičiant pagrindą. Afininės transformacijos naudojant vienarūšes koordinates

Koordinačių transformacijos problema yra taip: žinant naujos pradžios koordinates ir naujus koordinačių vektorius senojoje sistemoje:

, , , (3)

išreikšti koordinates x,y taškų M senojoje koordinačių sistemoje, per koordinates šį tašką naujoje sistemoje.

Iš (3) formulių išplaukia, kad

; ; . (4)

(pagal trikampio taisyklę).

Nes , , tada pagal taško koordinates , , t.y. ; .

Tada, naudodami formules (4), gauname:

kur rasime:

(5)
;

Taip išreiškiamos koordinatės x,y savavališkas taškas M senojoje sistemoje per savo koordinates naujoje sistemoje .

Formulės (5) vadinamos afininės koordinačių sistemos transformavimo formulės.

Koeficientai at - naujojo vektoriaus koordinatės senojoje sistemoje; koeficientai , kai yra naujojo vektoriaus koordinatės senojoje sistemoje, laisvieji terminai , yra naujos pradžios koordinatės senojoje sistemoje:

Taško koordinatės M

naujoje sistemoje

X
adresu
=
=
+
+
+
+

Lentelė vadinama perėjimo matrica iš pagrindo , į pagrindą , .

Ypatingi afininės transformacijos atvejai

Koordinačių sistemos

1. Pradžios perkėlimas.

Su šia transformacija , , A (40 pav.).

Raskime vektorių koordinates senojoje sistemoje, t.y. , , Ir:

Þ Þ , ;

Þ Þ , .

Tada formulės (5) bus tokios formos:

APIE"
Ryžiai. 40
(7)

Formulės (7) vadinamos koordinačių vektorių keitimo formulės.

Krypties kampo tarp vektorių samprata.

Stačiakampės koordinačių sistemos konvertavimas

Krypties kampo tarp vektorių sąvoka pristatoma orientuotoje plokštumoje.

Tegul ir yra nuliniai vektoriai, nurodyti tam tikra tvarka ( - pirmasis vektorius, - antrasis vektorius).

Jei || , Tai krypties kampas tarp vektoriaus ir vektoriaus paskambino

dydžio , jei pagrindas , - teisė;

dydžio , jei paliktas pagrindas.

Jeigu , Tai krypties kampas tarp jų laikoma lygia, jei , tada (42 pav.).


Apsvarstykite dvi stačiakampes Dekarto koordinačių sistemas ir . Leiskite M(x;y) V , V . Kadangi stačiakampė koordinačių sistema yra ypatingas afininės sistemos atvejis, galime naudoti formules (5) iš §12, tačiau koeficientai , , , nebegali būti savavališkas.

Raskime vektorių koordinates senojoje sistemoje. Panagrinėkime du atvejus.

1) Pagrindai ir , yra vienodai orientuoti (43 pav.).

A 1
A
IN
B 1
APIE"
Ryžiai. 44
a
a

Dešinieji trikampiai Ir lygus hipotenuzei ir smailiam kampui (
, ), vadinasi, Ir .

randame:

Vadinasi, .

Vadinasi, . Tada formulės (5) bus tokios formos:

Atkreipkite dėmesį, kad perėjimo matricos iš pagrindo į pagrindą determinantas,

.

2) Pagrindai , ir , yra nukreipti priešingai (45 pav.).

APIE
APIE"
Ryžiai. 45

APIE
APIE"
IN
B 1
A
A 1
a
Ryžiai. 46
Leiskite . Suveskime vektorius į bendrą pradžią APIE(46 pav.).

Motyvuodami panašiai kaip 1 atveju), gauname:

Vadinasi, ; .

Tada formulės (5) bus tokios formos:

Atkreipkite dėmesį, kad šiuo atveju perėjimo iš pagrindo į pagrindą matricos determinantas

(8) ir (9) formules galima derinti:

, Kur

.

Ypatingi transformacijos atvejai

Stačiakampė koordinačių sistema

1. Pradžios perkėlimas: , .

Polinės koordinatės

Jei yra nurodyta taisyklė, pagal kurią taškų padėtį plokštumoje galima nustatyti naudojant sutvarkytas realiųjų skaičių poras, tada jie sako, kad plokštumoje nurodyta koordinačių sistema. Be afininės koordinačių sistemos, kuri buvo aptarta §10, matematikoje dažnai naudojama polinė koordinačių sistema plokštumoje.

Poliarinė koordinačių sistema įvedama orientuotoje plokštumoje.

Pora, susidedanti iš taško APIE o vieneto vektorius vadinamas poliarinė koordinačių sistema ir yra paskirtas arba . Kryptis tiesiai paskambino poliarinė ašis, taškas APIE- stulpas(48 pav.).

Taigi, . Jeigu M sutampa su APIE, Tai . Dėl bet kurio taško M jo poliarinis spindulys

Jeigu M sutampa su stulpu APIE, tada j yra neapibrėžtas. Iš krypties kampo tarp vektorių apibrėžimo (žr. §13) išplaukia, kad poliarinis kampas

R
Ryžiai. 51
M
j
M 1

Išveskime formules perėjimui iš polinių koordinačių į stačiakampes Dekarto koordinates ir atvirkščiai.

Tegul yra polinė koordinačių sistema orientuotoje plokštumoje, , V . Prie poliarinės sistemos pritvirtinkime vektoriui statmeną vienetinį vektorių, kad pagrindas būtų dešiniarankis (51 pav.).

, .

Leiskite M(x;y) V . Tada; (51 pav.).

Gauta perėjimo iš poliarinių į stačiakampes koordinates formulės:

Palyginkime abi lygių puses ir pridėkime:

, kur (šaknis paimama su „+“ ženklu, nes ). Þ Þ
;
.

a
APIE
V
Ryžiai. 52
komentuoti . Sprendžiant problemas, susijusias su perėjimu iš stačiakampių Dekarto koordinačių į poliarines, neužtenka rasti tik arba tiesiog , nes Neįmanoma vienareikšmiškai nustatyti polinio kampo iš vienos trigonometrinės funkcijos: intervale yra du kampai su vienodais kosinusais (du kampai su tais pačiais sinusais) (52 pav.). Todėl jūs galite teisingai rasti polinį kampą j tik tuo pačiu metu apskaičiuodami Ir .

M1 = (x 1, y 1), M = (x, y). Kadangi taškas M dalija atkarpą M 0 M 1 λ atžvilgiu, tai

; (1)

Su šia afinine transformacija taškai M 0, M 1, M pateks į taškus M 0 ', M 1 ', M' su tomis pačiomis koordinatėmis kaip ir taškai M 0, M 1, M, bet tik O" e koordinačių sistema " 1 e" 2. Šios koordinatės vis dar yra sujungtos ryšiais (1), iš kurių išplaukia, kad M′ dalija atkarpą M 0 ′M 1 ′ λ atžvilgiu. Tai įrodo teoremą.

3. Afininių transformacijų (perėjimų formulių) analitinė išraiška.

Užduotis: Kaip, žinant vienos sistemos parametrus kitos atžvilgiu, galima nustatyti taško padėtį abiejose koordinačių sistemose (t.y. kaip rasti formules perėjimui iš vienos sistemos (senos) į kitą naują sistemą.

Panagrinėkime afininių koordinačių sistemų transformacijos atvejus.

1) Tebūnie duota sistema R=(O, (e 1, e 2)) ir joje duota M=(x,y) R, O(0,0) R yra pradžios koordinatės. e 1 (1,0) R, e 2 (0,1) R – bazinių vektorių koordinatės.

2) Tegu pateikta antroji koordinačių sistema R′=(O, (e 1 ′, e 2 ′)) ir yra žinomi parametrai, apibrėžiantys naująjį pagrindą ir naują koordinačių pradžią per senąją koordinačių sistemą, t.y. O′(x 0 ,y 0) R , e 1 ′(C 11 ,C 12) R , e 2 ′(C 12 ,C 22) R

Iškelkime užduotį surasti taško M koordinates naujoje koordinačių sistemoje (M(x′,y′) R ′). Pažymime nežinomas taško M(x′,y′) koordinates.

Trims taškams O,O′,M: O′M=O′O +OM. О′М – taško M spindulio vektorius naujoje koordinačių sistemoje, tai reiškia, kad jo koordinatės sutaps su vektoriaus О′М koordinatėmis R′ sistemoje (О′М↔М R ′)=>О′М( x′,y′) R ′ => О′М=x′e 1 ′+y′e 2′ (1) ; О′О - taško О′ spindulio vektorius sistemoje R′, t.y. jo koordinatės sutaps su О′О↔ О′ R => О′О(x 0 ,y 0) R => О′О= x 0 e 1 +y 0 e 2 koordinatėmis (2) ; OM↔ M R => OM=xe 1 +ye 2 (3). Tai. vektorius О′М=ОМ −ОО′ po pakeitimo šia vektorine plėtimosi lygybe (1), (2) ir (3) turės tokią formą:

x′e 1 ′+y′e 2 ′= xe 1 +ye 2 −(x 0 e 1 +y 0 e 2) (4); nes sąlygoje nurodyti parametrai, kurie nustato naujų bazinių vektorių koordinates per senąjį pagrindą, gauname tokias vektorių lygybes naujiems baziniams vektoriams:

e 1 ′(C 11, C 12) R => e 1 ′= C 11 e 1 + C 21 e 2;

e 2 ′(C 12, C 22) R => e 2 ′= C 12 e 1 + C 22 e 2; (5)

Pakeiskime (5) į kairę (4) pusę ir sugrupuokime bazinių vektorių e 1 ir e 2 atžvilgiu.

x'(C 11 e 1 + C 21 e 2)+y'(C 12 e 1 + C 22 e 2) - xe 1 -xe 2 +x 0 e 1 -ye 2 +x 0 e 1 +y 0 e 2 = 0.
(x'C 11 + y'C 12 e 1 -x+x 0)e 1 + (x'C 21 +y' C 22 -y+y 0)e 2 =0.

Nes (e 1, e 2) sudaro pagrindą, tai yra tiesiškai nepriklausoma sistema, kuriai tenkinama paskutinė vektorių lygybė, jei visi koeficientai kairėje yra lygūs nuliui, t.y. atsižvelgiant į tai

(6);

(6) – kintamiesiems x′ ir y′ perėjimo iš senosios sistemos R į naują sistemą R′ formulės.

Kadangi determinanto stulpeliai yra bazinių vektorių e 1 ′ ir e 2 ′ koordinatės, šis determinantas niekada neišnyksta, t.y. sistema (6) yra vienareikšmiškai išsprendžiama atsižvelgiant į kintamuosius x′ ir y′, o tai visada leidžia rasti atvirkštinio perėjimo iš R′ į R formulę.

Formulėms (6) yra du specialūs atvejai

1. pagrindo pakeitimas;

2. pradžios perkėlimas.

1. Sistema R′, gauta iš sistemos R, pakeičiant bazę išlaikant tą pačią pradžią R=(O, (e 1 , e 2))→ R′=(O, (e 1 ′, e 2 ′)), t .e. O′(x 0,y 0)=O(0,0)=>x 0 =y 0 =0, tada bazės pakeitimo formulės bus tokios formos:

(7)

2. Tegul sistema R′ gaunama iš R, perkeliant pradžią iš taško O į tašką O′, išlaikant tą patį pagrindą:
R=(O, (e 1, e 2)) → R'=(O', (e 1, e 2))=> e 1 '(1,0), e 2 '(0,1), t .O. formulės įgaus formą.

Anglų kalba: Vikipedija daro svetainę saugesnę. Naudojate seną žiniatinklio naršyklę, kuri ateityje negalės prisijungti prie Vikipedijos. Atnaujinkite įrenginį arba susisiekite su IT administratoriumi.

中文: The以下提供更长,更具技术性的更新(仅英语).

ispanų kalba: Wikipedia está haciendo el sitio más seguro. Naudota šiuo metu interneto svetainėje, kurioje nėra Vikipedijos ir ateities sąsajos. Aktualūs įrenginiai arba susisiekite su administratoriaus informacija. Más abajo hay una aktualización más larga y más técnica en inglés.

ﺎﻠﻋﺮﺒﻳﺓ: ويكيبيديا تسعى لتأمين الموقع أكثر من ذي قبل. أنت تستخدم متصفح وب قديم لن يتمكن من الاتصال بموقع ويكيبيديا في المستقبل. يرجى تحديث جهازك أو الاتصال بغداري تقنية المعلومات الخاص بك. يوجد تحديث فني أطول ومغرق في التقنية باللغة الإنجليزية تاليا.

prancūzų kalba: Wikipédia va bientôt padidina saugų svetainę. Vous utilisez actuellement un navigateur web ancien, qui ne pourra plus se connecter à Wikipédia lorsque ce sera fait. Merci de mettre à jour votre appareil ou de contacter votre administrateur informatique à cette fin. Des informations supplémentaires plus technikos et en anglais sont disponibles ci-dessous.

日本語: ???す るか情報は以下に英語で提供していま。

Vokiečių kalba: Wikipedia erhöht die Sicherheit der Webseite. Du benutzt einen alten Webbrowser, der in Zukunft nicht mehr auf Wikipedia zugreifen können wird. Bitte aktualisiere dein Gerät arba sprich deinen IT-administrator an. Ausführlichere (un technisch detailliertere) Hinweise findest Du unten in english Sprache.

italų kalba: Wikipedia sta rendendo il sito più sicuro. Likite naudodami žiniatinklio naršyklę che non sarà, kad galėtumėte prisijungti prie Vikipedijos ateities. Per favore, aggiorna il tuo dispositivo o contatta il tuo amministratore informatico. Più in basso è disponibile un aggiornamento più dettagliato e technico in English.

angl.: Saugesnis lesz a Vikipedija. A naršyklę, amit naudoji, nemok gali jungtis ir ateityje. Naudokitės šiuolaikiškomis programomis arba pažymėjote problematišką sistemą. Alább skaitykite išsamią paaiškinimą (angolul).

Svenska: Vikipedija kreipsis sidan mer säker. Du använder en äldre webbläsare som inte kommer att kunna läsa Wikipedia i framtiden. Atnaujinkite IT administratorių. Det finns en längre och mer teknisk förklaring på engelska längre ned.

हिन्दी: विकिपीडिया साइट को और अधिक सुरक्षित बना रहा है। आप एक पुराने वेब ब्राउज़र का उपयोग कर रहे हैं जो भविष्य में विकिपीडिया से कनेक्ट नहीं हो पाएगा। कृपया अपना डिवाइस अपडेट करें या अपने आईटी व्यवस्थापक से संपर्क करें। नीचे अंग्रेजी में एक लंबा और अधिक तकनीकी अद्यतन है।

Pašaliname nesaugių TLS protokolo versijų, ypač TLSv1.0 ir TLSv1.1, kuriomis naudojasi jūsų naršyklės programinė įranga prisijungdama prie mūsų svetainių, palaikymą. Dažniausiai tai sukelia pasenusios naršyklės arba senesni Android išmanieji telefonai. Arba tai gali būti trukdžiai iš įmonės ar asmeninės „Web Security“ programinės įrangos, kuri iš tikrųjų sumažina ryšio saugumą.

Norėdami pasiekti mūsų svetaines, turite atnaujinti savo žiniatinklio naršyklę arba kitaip išspręsti šią problemą. Šis pranešimas išliks iki 2020 m. sausio 1 d. Po šios datos jūsų naršyklė negalės užmegzti ryšio su mūsų serveriais.

Vienalytėse koordinatėse taškas rašomas kaip ir bet kuriam mastelio veiksniui. Be to, jei taškas pateikiamas vienarūšėmis koordinatėmis, tada jo dvimatės Dekarto koordinates galima rasti kaip ir .

Vienalyčių koordinačių geometrinė reikšmė yra tokia (6 pav.). savavališkas taškas tiesėje

Ryžiai. 6. Geometrinis vienarūšių koordinačių aiškinimas

Taigi tarp produktyvaus taško su koordinatėmis (x, y) ir skaičių trigubų aibės (W×x, W×y, W), W≠0, nustatomas vienas su vienu atitikimas, kuris leidžia svarstysime skaičius W×x, W×y, W naujomis šio taško koordinatėmis. Taigi vienarūšės koordinatės gali būti pavaizduotos kaip dvimatės plokštumos, padidintos koeficientu W, įterpimas į plokštumą z = W (čia z = 1) trimatėje erdvėje.

Vienalyčių koordinačių naudojimas pasirodo patogus sprendžiant net paprasčiausius uždavinius.

Jei ekrano įrenginys veikia tik su sveikaisiais skaičiais (arba jei reikia dirbti tik su sveikaisiais skaičiais), tai esant savavališkai W reikšmei (pavyzdžiui, W=1), taškas su vienodomis koordinatėmis (0,5; 0,1; 2,5) negali būti atstovaujama . Tačiau pagrįstai pasirinkus W, galima užtikrinti, kad šio taško koordinatės būtų sveikieji skaičiai. Visų pirma, kai nagrinėjamo pavyzdžio W = 10, gauname (5; 1; 25).

Kitas atvejis. Kad transformacijos rezultatai nesukeltų aritmetinio perpildymo, taške su koordinatėmis (80000; 40000; 1000), galite paimti, pavyzdžiui, W=0,001. Dėl to gauname (80; 40; 1).

Tačiau pagrindinis vienarūšių koordinačių pritaikymas yra geometrinės transformacijos, nes naudojant vienarūšių koordinačių tripletus ir trečiosios eilės matricas, galima aprašyti bet kokią afininę transformaciją plokštumoje. Panašiai, naudodamiesi vienarūšių koordinačių keturgubais ir ketvirtos eilės matricomis, galite apibūdinti bet kokią transformaciją trimatėje erdvėje.

Kaip žinoma, vertimo, mastelio keitimo ir pasukimo transformacijos matricos forma rašomos kaip

P' = P × S;

Vertimas įgyvendinamas atskirai (naudojant sudėjimą) nuo mastelio keitimo ir pasukimo (naudojant daugybą). Jei taškus išreiškiame vienarūšėmis koordinatėmis, tai visos trys transformacijos gali būti realizuojamos naudojant daugybas. Čia pažvelgsime į 2D transformacijas.

Transporto lygtys yra parašytos homogeninių koordinačių transformacijos matricos forma taip:

P' = P × T(dx, dy),

.

Kartais tokie posakiai rašomi taip:

Apsvarstykite, pavyzdžiui, dviejų taškų vertimą. Tegul reikia perkelti tašką P į tašką P’ per atstumą (dx1, dy1), o tada į P’’ atstumu (dx2, dу2). Bendras perdavimas turi būti lygus atstumui (dх1+d2, dу1+dу2). Įrašykime duomenis į formą

P’ = P × T (dx1, dy1);

P'' = P' × T (dx2, dy2).

Pirmąją formulę pakeitę antrąja, gauname

P’’ = P × (T (dx1, dy1) × T (dx2, dy2)).

Matricos sandauga T (dx1, dy1) ∙ T (dx2, dy2) yra

Taigi gautas perkėlimas yra (dx1+dx2, dy1+dy2), t.y. nuoseklūs nešimai yra priediniai.

Mastelio keitimo lygtys matricos pavidalu, naudojant vienarūšes koordinates, parašytos kaip

,

.

P’ = P’ × S(Sx, Sy).

Matricos sandauga S(Sx1, Sy1) × S(Sx2, Sy2) yra

Taigi, vienas po kito einantys masteliai yra dauginami.

Galiausiai sukimosi lygtis (dešiniarankių sistemoje) gali būti pavaizduota kaip

.

Vienas po kito einantys apsisukimai yra papildomi.

2D transformacijų komponavimas naudojant vienarūšes koordinates. Matricos sandauga vadinama skirtingais atvejais sąjunga, ryšys, sujungimas Ir kompozicija. Mes naudosime paskutinį iš išvardytų terminų.

Apsvarstykite, pavyzdžiui, objekto sukimąsi kokio nors savavališko taško P1 atžvilgiu. Kadangi žinome, kaip suktis tik aplink pradinę vietą, pradinę problemą padalijame į tris dalis:

Vertimas, kuriame taškas P1 perkeliamas į ištaką;

Pasukti;

Vertimas, kuriame taškas iš pradžios grąžinamas į pradinę padėtį P1.

Šių transformacijų seka parodyta fig. 7.1.

Ryžiai. 7.1. Pasukite objektą apie kokį nors savavališką tašką

Gauta transformacija atrodo taip

Naudodami panašų metodą, galite pakeisti objekto mastelį, palyginti su savavališku tašku P1: perkelkite P1 į pradinę vietą, padidinkite jo mastelį, perkelkite atgal į tašką P1. Gauta transformacija šiuo atveju atrodys taip

Panagrinėkime sudėtingesnę transformaciją. Tarkime, kad reikia nustatyti objekto mastelį, pasukti ir padėti jam tinkamoje vietoje (namas 7.2 pav.), kur sukimosi ir mastelio keitimo centras yra taškas P1.

Ryžiai. 7.2. konversijos sekos pavyzdys

Transformacijų seką sudaro taško P1 perkėlimas į pradinę vietą, mastelio keitimas ir pasukimas, o tada perėjimas iš pradžios į naują padėtį P2. Taikomosios programos duomenų struktūroje, kurioje yra ši transformacija, gali būti mastelio koeficientas (-iai), sukimo kampas ir vertimo dydžiai arba gali būti parašyta gauta transformacijos matrica:

T (-x1, -y1) × S (Sx, Sy) × R (A) × T (x2, y2).

Apskritai matricos daugyba yra nekomutacinė. Jei M1 ir M2 reiškia elementarų vertimą, mastelio keitimą arba sukimąsi, komutaciškumas galioja šiais ypatingais atvejais:

M1 M2
Išversti mastelį Pasukti mastelį (esant Sx=Sy) Išversti Padidinti Pasukti Pasukti

Bendriausios formos sudėtis, sudaryta iš operacijų R, S ir T, turi matricą

Viršutinė 2 × 2 dalis yra kombinuota sukimosi ir mastelio keitimo matrica, o tx ir ty apibūdina grynąjį vertimą. Norint apskaičiuoti P∙M kaip vektoriaus ir 3 × 3 matricos sandaugą, reikia atlikti 9 daugybos ir 6 sudėjimo operacijas. Apibendrintos matricos paskutinio stulpelio struktūra leidžia supaprastinti faktiškai atliekamus veiksmus.

Pirmiausia išsiaiškinkime, kas yra transformacijos? Tarkime, kad turime modelį (paprastumo dėlei tebūnie trikampis). Ir trys koordinačių erdvės: objekto erdvė (kuriame aprašytas šis trikampis), pasaulio erdvė ir kameros erdvė. Taigi, transformacija yra vienoje koordinačių sistemoje (objekte) esančio objekto koordinačių išraiška, naudojant kitos koordinačių sistemos (pirmiausia pasaulio, o paskui kameros) koordinates.

Kaip jau rašiau anksčiau, naudojant skirtingas koordinačių erdves lengviau susikurti virtualų pasaulį. Objektai kuriami objektų erdvėje, kiekvienas objektas turi savo koordinačių erdvę. Pasaulio erdvė jungia visus virtualaus pasaulio objektus ir leidžia labai sudėtingus dalykus padaryti labai paprastais (pavyzdžiui, judančius objektus). Sukūrus sceną ir perkėlus visus objektus, pasaulio koordinatės konvertuojamos į kameros koordinačių erdvę. Naudosime tik vieną kamerą, tačiau realiose situacijose galima sukurti kelias. Pavyzdžiui, kelios kameros buvo naudojamos nuostabiame žaidime Earth 2150: Escape from the blue planet.

Taigi, apie ką aš kalbu: transformacijos būtinos norint naudoti kelias koordinačių erdves.

Pirma, prisiminkime kai ką apie vektorius. Tai mums padės šis paveikslas:

Ką čia matome: pasaulio koordinačių erdvę, kurią sudaro x, y, z ašys. Vienetų vektoriai i, j, k vadinami pasaulio koordinačių erdvės vienetiniais arba baziniais vektoriais. Naudodami šių vektorių sumą, galite gauti bet kurį vektorių pasaulio koordinačių erdvėje.

v- vektorius, jungiantis pasaulio koordinačių pradžią ir objekto koordinačių pradžią. Vektoriaus v ilgis lygus atstumui tarp pasaulio koordinačių pradžios ir objekto koordinačių pradžios. Apsvarstykite vektorinę formą v=(5,2,5):

v= x* i+ y* j+ z* k = 5*i + 2*j + 5*k

Kaip jau rašiau aukščiau, bazinių vektorių pagalba galite pavaizduoti bet kurį tam tikros erdvės tašką (vektorių), ką ir parodo ši lygtis.

Vektoriai p,q,r- objektų erdvės baziniai vektoriai. Atkreipkite dėmesį į tai i,j,k nebūtinai bus lygus p,q,r.

Šiame paveiksle praleidau keletą detalių: objekto koordinačių erdvėje nurodyti trys taškai, kurie sudaro trikampį. Be to, nenurodžiau kameros, kuri nukreipta į trikampį.

Tiesinės koordinačių transformacijos naudojant matricas

Pirmiausia pažvelkime į vienetų vektorius i,j,k, kurios kryptimi sutampa su pasaulio erdvės koordinačių ašimis ir vadinamos pasaulio erdvės vienetiniais vektoriais arba baziniais vektoriais.

Parašykime šiuos vektorius koordinačių forma kaip matricas:

i= [ i x i y i z ] = [ 1 0 0 ] j= [ j x j y j z ] = [ 0 1 0 ] k= [ k x k y k z ] = [ 0 0 0 ]

Čia vektoriai pavaizduoti 1x3 matricomis (eilučių matricomis).

Šiuos bazinius vektorius galime parašyti naudodami vieną matricą:

Ir netgi, kas yra daug svarbiau, šiuos vektorius galime parašyti taip:

Kaip matote, rezultatas yra 3x3 arba 4x4 dydžio vienetų matrica.

Atrodytų, kas čia blogo? Tik pagalvokite, į vieną matricą galima užrašyti kažkokius kvailus erdvės bazinius vektorius. Bet ne, „nepagalvosite“!!! Čia slepiasi viena baisiausių trimačio programavimo paslapčių.

Kaip rašiau aukščiau, bet kuris taškas, esantis virtualiame pasaulyje, gali būti parašytas vektorine forma:

v= x* i+ y* j+ z* k

Kur v- taškas erdvėje, x,y,z - taško koordinatės v, A i,j,k- erdvės baziniai vektoriai. Atkreipkite dėmesį, kad čia kalbame apie tašką, bet žiūrime į vektorių. Tikiuosi, kad prisimenate, kad vektorius ir taškas iš esmės yra tas pats dalykas.

Aukščiau pateikta formulė vadinama vektorine vektoriaus forma. Yra ir kitas pavadinimas – linijinis vektorių derinys. Tai tiesa, beje.

Dabar dar kartą pažvelkime į vektorių v. Parašykime eilės matricoje: v = [ 5 2 5 ]

Atkreipkite dėmesį, kad vektoriaus ilgis v yra atstumas nuo pasaulio koordinačių erdvės pradžios iki objekto koordinačių erdvės pradžios.

Pabandykime padauginti šį vektorių iš matricos, kurioje įrašyti pasaulio erdvės baziniai vektoriai (tikiuosi, kad prisimenate matricos daugybos formulę):

Dėl to gauname tokią lygtį:

v M = [ (xi x + yj x + zk x) (xi y + yj y + zk y) (xi z + yj z + zk z) ]

Turime vektorių. Tie. Vektoriaus padauginimo iš matricos rezultatas yra vektorius. Šiuo atveju vektorius nepasikeitė. Bet jei matricos elementai yra ne vienetai (pagrindinėje įstrižainėje) ir nuliai (visi kiti elementai), o kokie nors kiti skaičiai, vektorius pasikeis. Todėl galime sakyti, kad matrica M atlieka koordinačių erdvių transformaciją. Apsvarstykite bendrą formulę:

a, b – vektoriai, M – koordinačių erdvių transformacijos matrica. Formulę galima perskaityti taip: „matrica M transformuoja tašką a į tašką b“.

Kad būtų aiškumo, pažvelkime į pavyzdį. Turime konvertuoti koordinates iš objektų erdvės (p, q) į pasaulio erdvę (i, j):

i,j- pagrindiniai pasaulio erdvės vektoriai, p,q- objektų erdvės baziniai vektoriai. Paveikslėlyje matosi, kad objekto koordinačių erdvė apie z ašį pasukta -45 laipsnių kampu (paveiksle to nematyti). Be to, vektoriai q,p 1,5 karto daugiau vektorių i,j, o tai reiškia, kad objektų erdvėje apibrėžti objektai pasaulio erdvėje atrodys pusantro karto mažesni.

Norėdami įsivaizduoti, kaip objekto erdvės modelis atrodys po transformacijos, galite pridėti vektorių rėmelį i,j:

Galite piešti tą patį rėmelį p,q, bet piešinio nesugriozdinau.

Tarkime, kad objekto erdvėje nubrėžėme trikampį (a pav.). Pasaulio erdvėje šis trikampis bus pasuktas 45 laipsniais ir sumažintas trečdaliu (b pav.):

Dabar surinkime visus galvosūkio elementus: kaip žinome, transformaciją galima atlikti naudojant matricą. Matricų eilutės yra baziniai vektoriai. Pasaulio koordinačių erdvės bazinių vektorių koordinatės objektų erdvėje yra tokios:

i = [ 0.473 0.473 ] j = [ -0.473 0.473 ]

Kaip mes sužinojome koordinates? Pirma, mes žinome, kad koordinačių erdvės yra pasuktos viena kitos atžvilgiu 45 laipsnių kampu. Antra, objektų erdvės baziniai vektoriai yra 1,5 karto ilgesni už pasaulio erdvės bazinius vektorius. Tai žinodami nesunkiai apskaičiavome vektorių koordinates i,j.

Dėl to gauname tokią transformacijos matricą (šiuo atveju sukimas arba sukimas):

Arba trimatėje erdvėje:

Visos vertės yra apytikslės.

Tai matrica koordinatėms transformuoti iš objektinės erdvės į inercinę erdvę (primenu, kad inercinės erdvės baziniai vektoriai sutampa su pasaulio erdvės baziniais vektoriais). Norint paversti trikampį iš objektinės erdvės į inercinę erdvę, reikia padauginti visus trikampio taškus (vektorius) iš transformacijos matricos.

Paskutiniame pavyzdyje susidūrėme su dviem transformacijomis: pasukimu ir mastelio keitimu. Abi šios transformacijos yra tiesinės.

Dabar, kai pažvelgėme į tiesinių transformacijų pavyzdžius, galime susipažinti su apibrėžimu:

Tiesinės transformacijos yra koordinačių transformacijos, kurios neiškraipo erdvių. Tie. visos lygiagrečios linijos lieka lygiagrečios (tačiau yra viena išimtis). Arba labai paprastai: atliekant tiesines transformacijas, trikampis niekada nepavirs apskritimu ar kvadratu, bet visada liks trikampiu.

Dabar, kai apytiksliai suprantame, kas yra tiesinės transformacijos, pažvelkime į konkrečias formules:

Skalė

k 1 ,k 2 ,k 3 - mastelio koeficientai. Jei k 1, objektai didėja.

Rotacija

Sukimas aplink x ašį:

Sukimas aplink y ašį:

Sukimas aplink z ašį:

Beje, būtent šią matricą (sukimosi aplink z ašį) naudojome aukščiau.

Suktis gali būti ne tik aplink koordinačių erdvę sudarančias ašis, bet ir apie savavališkas tiesias linijas. Sukimo aplink savavališką tiesę formulė yra gana sudėtinga, mes dar nesame pasiruošę ją apsvarstyti.

Svarbiausias dalykas, kurį reikia atsiminti iš to, kas išdėstyta aukščiau, yra tai: transformacijos matricos eilutėse yra naujos koordinačių erdvės baziniai vektoriai, išreikšti senosios koordinačių erdvės koordinatėmis. .

Jei suprantate šį paprastą dalyką (kad naujos erdvės baziniai vektoriai yra įrašyti matricoje), tada pažvelgę ​​į transformacijos matricą galite lengvai pamatyti naują koordinačių erdvę.

Ir paskutinis dalykas:
Tiesinės transformacijos negali perkelti objektų. Tie. objektus galima padidinti/sumažinti, juos galima pasukti, bet jie išliks nejudantys.

Afininės transformacijos

Afininės transformacijos yra tiesinės transformacijos su vertimu. Naudodami afinines transformacijas galite perkelti objektus.

Formulė labai paprasta:

A = bM + v;

Kur b yra pradžios taškas, M yra tiesinės transformacijos matrica, a yra transformacijos taškas ir v yra vektorius, jungiantis dvi erdves. Kitaip tariant, tai vektorius, kurio ilgis lygus atstumui tarp dviejų koordinačių erdvių.

Pamokos pradžioje esančiame paveikslėlyje reikalinga afininė transformacija: pirmiausia tiesinė transformacija iš objekto erdvės į inercinę erdvę, o tada visų objekto erdvės taškų perkėlimas į pasaulio erdvę naudojant vektorių v.

Skaičiavimams supaprastinti 3D grafikos programavime naudojami 4D vektoriai, 4x4 matricos ir vadinamosios homogeninės koordinatės. Ketvirtasis matmuo nevaidina jokio vaidmens, jis įvedamas tik siekiant supaprastinti skaičiavimus.

Keturmatis vektorius, kaip galėjote atspėti, naudoja keturis komponentus: x, y, z ir w. Ketvirtasis vektoriaus komponentas vadinamas vienalyte koordinate.

Geometriškai pavaizduoti vienalytę koordinatę labai sunku. Todėl nagrinėsime trimatę vienalytę erdvę su koordinatėmis (x,y,w). Įsivaizduokime, kad dvimatė plokštuma yra apibrėžta taške w=1. Atitinkamai dvimatis taškas homogeninėje erdvėje vaizduojamas tokiomis koordinatėmis (x,y,1). Visi erdvės taškai, kurie nėra plokštumoje (jie yra plokštumose, kur w != 1), gali būti apskaičiuojami projektuojant į dvimatę plokštumą. Norėdami tai padaryti, visus šio taško komponentus turite padalyti į vienalytę. Tie. jei w!=1, „fizinėje“ (kur dirbame ir kur w=1) plokštumoje taško koordinatės bus tokios: (x/w,y/w,w/w) arba (x/w) ,y/w ,1). Pažiūrėkite į paveikslėlį:

Vektorių koordinatės yra tokios:

V 1 = [ 3 3 3 ] v 2 = [ 3 1 0 ] v 3 = [ 3 - 2 - 2 ]

Šie vektoriai projektuojami į „fizinę“ plokštumą (w=1) taip:

V 1 = [ 1 1 1 ] v 3 = [ -1,5 1 1 ]

Paveiksle pavaizduoti trys vektoriai. Atkreipkite dėmesį, kad kai taškas yra w=0 plokštumoje, šio taško negalima projektuoti į fizinę plokštumą (vektorius v 2).

Kiekviename fizinės plokštumos taške yra begalinis taškų skaičius vienalytėje erdvėje.

Keturmatėje erdvėje viskas lygiai taip pat. Mes dirbame fizinėje erdvėje, kur w = 1: (x,y,z,1). Jei atlikus skaičiavimus w != 1, tada visas taško koordinates reikia padalyti į vienalytę: (x/w,y/w,z/w,w/w) arba (x/ w,y/w,z/w,1). Taip pat yra ypatingas atvejis, kai w = 0. Tai panagrinėsime vėliau.

Dabar pereikime prie praktikos: kam, po velnių, mums reikia vienalytės koordinatės?

Kaip jau išsiaiškinome, 3x3 matrica reiškia tiesinę transformaciją, t.y. jame nėra perdavimo (judėjimo). Perkėlimui naudojamas atskiras vektorius (ir tai yra afininė transformacija):

V = aM + b

Tie. visus objekto taškus (vektorius) padauginame iš transformacijos matricos M, kad patektume į inercinę koordinačių sistemą (kurios baziniai vektoriai sutampa su pasaulio koordinačių sistemos baziniais vektoriais), o tada vektoriumi b patenkame į pasaulio erdvę. . Priminsiu, kad vektorius b jungia objektinės erdvės pradžią ir pasaulio erdvės pradžią.

Taigi, naudodami keturis matmenis, į vieną matricą galite sutalpinti tiek tiesines transformacijas (sukimą, mastelio keitimą), tiek vertimą.

Įsivaizduokime, kad ketvirtasis komponentas visada lygus vienetui (nors jau išsiaiškinome, kad taip nėra). Dabar tiesinę transformaciją galima pavaizduoti naudojant 4x4 matricą:

Pažvelkime į vektorių dauginimo iš transformacijos matricos keturmatėje erdvėje formulę:

V x = (xi x + yj x + zk x + w*0) v y = (xi y + yj y + zk y + w*0) v z = (xi z + yj z + zk z + w*0) v w = (x*0 + y*0 + z*0 + w*1) Kaip matome, transformuoto vektoriaus komponentai naudojant 4x4 matricą yra lygūs transformuoto vektoriaus komponentams, naudojant 3x3 matricą. Ketvirtasis komponentas, kaip susitarėme, visada bus lygus vienetui, todėl jį galima tiesiog išmesti. Todėl galime teigti, kad 3x3 ir 3x4 dydžio matricomis atliekamos transformacijos yra lygiavertės.

Dabar pažiūrėkime į perdavimo matricą:

Padauginkite bet kurį vektorių iš objektinės erdvės (žr. pav. pamokos pradžioje) iš šios matricos ir galėsite išreikšti šį vektorių pasaulio koordinačių erdvėje (tai yra, jei objekto ir pasaulio erdvių baziniai vektoriai yra lygūs).

Atkreipkite dėmesį, kad tai taip pat yra tiesinė transformacija, tik keturmatėje erdvėje.

Naudodami matricos sandaugą galime sujungti sukimosi matricą ir vertimo matricą:

Ši paskutinė matrica yra būtent tai, ko mums reikėjo nuo pat pradžių. Turėtumėte gerai suprasti, ką tiksliai reiškia visi jo elementai (išskyrus 4 stulpelį).



Ar jums patiko straipsnis? Pasidalinkite su draugais!