Euler-szögek vezethet a holtpont

A legtöbb programozó, az első alkalommal próbál programozni a mozgását a kamera kódot írni, mint ez:

Ez a kód nem fog működni, vagy legalábbis akkor úgy tűnik. A kód működik, de csak az első változás, és talán, hogy kis változások (állásszög) és elfordulási (tekercs). Ön most találtam meg - és ez az, amiért ezt olvasod - igaz?

Tehát, ha átalakítani a három szög a mátrix (illetve ha három glRotate funkció), akkor a program a mátrixképzésben, tesz néhány feltételezések sorrendben ezek háromszor fordulnak.

Képzeld el a gépet. Három lehetséges forgástengelyének az úgynevezett 'Legyezésvezérlés' ( 'Címsor'), 'pitch' ( 'Pitch') és a 'bank' ( 'Roll'). „Címsor” - „Lesen” néha „Legyezésvezérlés” - de utálom, hogy a választás, mert a rövidített formája a szó van írva, mint Y „és ez ahhoz vezethet, hogy zavart a kijelölését az y tengely Y - úgyhogy helyébe az” Legyezésvezérlés „a” rovat”.

  • Változások a „Címsor” (Legyezésvezérlés) elforgatásával balra vagy jobbra.
  • Változások a pályán ( „Pitch”) kényszeríti az orrát a repülőgépek leszállni, és felmenni a farok (vagy fordítva).
  • Változások a tekercs ( „Roll”) növeli a végén az egyik szárny és a másik vége le van engedve.

Nos, ez az egész, hogy meg kell csinálni a programot. Is megállapodtak, hogy a forgatás pozitív lesz, a folyamatos óramutató járásával ellentétes irányban, és hogy ezt a nullára forgatás megfelel vízszintes repülés a North.

(Amikor a három szög képviseletére forgatások, gyakran nevezik „Euler forgásszögek” vagy egyszerűen „Eulers.” Szoktam írni, mint a Eulerszög (H, P, R).)

Tény, hogy a probléma az, hogy ha kombinálja a három forgatások, meg kell csinálni egy speciális módon - lehet választani bármilyen sorrendben -, de a matematika mindig arra kényszerítve, hogy egy adott választás. Azaz, akkor felváltva, ebben a sorrendben: először roll, majd szurok és hirtelen irányváltoztatás a végén. Most lássuk, mi történik az műveletek sorozatát - és az egyszerűség kedvéért mi csak azokat a dőlést.

(Ha - jobbkezes, akkor könnyebb lesz követni során a vita, ha bedobjuk a papír repülőgép Fold egyet most Lefties általában jobb térbeli képzelőerő és mentálisan kezelni körül :-).!

  1. Repülőgép (forgatás nélkül) vízszintesen álljon és az orr közvetlenül küldött az észak.
  2. Adjuk szögeket Lesen / rész / tekercs - (0,90,90), hogy mi történik:
  3. Repülőgép most dönthető 90 fok (tehát. Wing, hogy a jobb oldali végén jelzi az égen, és maradt a földön).
  4. . és a pályán a 90 fok (vagyis az orr emeljük felfelé). úgy, hogy az orra a gép pont a Nyugat, és a farkat arra irányul, hogy a keleti, a jobboldal mindig felfelé, a bal - lefelé.
  5. Most, a pilóta megpróbálja összehangolni a gépet vízszintesen, fordult a csúszkát jobbra joystick - amely szerint a fenti kódot kell fokozatosan csökkentsék a sík tekercs nullára. Akkor számíthat következtében, hogy az orr a repülőgép még irányul West - de valójában már az orrát a repülőgépek és roll.
  6. Így a végén ezt a manővert, HPR - szög változik (0,90,90) a (0,90,0) - amit most valójában a repülőgép helyzetét az űrben?
  7. Térjünk vissza az első bekezdés (síkban vízszintesen álljon, és arra irányul, orr, hogy az észak), és meghatározza a helyzetét a repülőgép, ha a HPR - szögek vannak megadva (0,90,0).
  8. Kiváló, nulla tekercs beállítja a megfelelő pozícióba a szárny - baloldal irányította a nyugati és a keleti jobb. és a 90 - fokos pályán emeli az orrát a repülőgép az égen!

Így, miután csökkenti a dőlésszög nulla, a sík, ahelyett, hogy vízszintesen futó és repül a nyugati, abban a helyzetben van az orr, függőlegesen latnis! A szempontból a pilóta, a repülőgép volt a 90 fokos bal henger és a repülő nyugat felé, és az elforgatás után a nyél joystick jobbra történő összehangolása érdekében a vízszintes síkban, szélszög ténylegesen megváltozott. mert a helyzet a repülés a nyugati, a gép felbukkant egy kiálló orr, mint az a repülőgép orrán jobbra fordult, és a farok - .. a bal oldalon, hogy van, definíció szerint, készített egy „Lesen”. Megpróbálom, hogy összehangolják a gépet továbbra is repül a nyugati, a változó az elfordulási szög (munkagépek) vagy szurok és sikertelen lesz!

Ez a fajta jelenség gyakran nevezik a „csukló lock” ( „gimbal lock”) - nevében a hatás fordul elő, hogy a valódi mechanizmusokat, amelyek három tengelyirányú közös (azaz három szabadsági fok ..). Amikor a két csuklós tengely párhuzamos egymással, akkor veszít egy szabadságfokkal ebben a rendszerben. Van egy autó slusszkulcsot, annyira rugalmas, hogy meg lehet hajlítva derékszögben, de ennek ellenére könnyen indul a motor.

Egy harmadik forgási szög, és az ügy leáll.

Ön most kiderült, ezt az egészet. De mi a teendő, hogy javítani?

Meg kell értenünk, milyen stádiumban hibáztunk. A probléma az, hogy az első változás a haladási szöget történt változtatni a pályán szög, és csökkent a bank - „Alignment” - .. Miután a kialakult helyzetet eredményeként a kezdeti módosítások szögek Kren + hangmagasság (azaz nem csak a helyreállítása a kezdeti haladási szöget, hogy valójában csinál naiv kód elején a dokumentumban).

Nos, azok után, amit már mondtam a kísértés, hogy módosítsa a kódot, mint ez:

Nem kétséges, meg fogja találni azt. ezt a kódot működik - és ez matematikailag levezethető-e. Mivel fenntartani „aktuális”, mint a rotációs mátrix, bármilyen elképzelés a „helyes”, hogy létrehozzák a mátrix műveletek már feledésbe merült -, és ha a változások viszonylag kis szögeket (rendszerint ilyen eset), akkor elvileg ez a kód működni.

Mégis van egy bosszantó probléma miatt előfordul, hogy a természet a gépesített matematika - kerekítési hiba.

Ha elment egy forgás Eulerszög, előfordulhat felhalmozási apró előforduló hibák kerekítés - ha megváltoztatja a szöget „Lesen” 0,1 fok mind a 3600 képkocka, a kapott szög „Lesen” nem lesz pontosan nulla. Azonban a játékos vezérli a színpadon a joystick nem veszi észre ezt a hibát - ez teljesen természetes az emberek számára.

Sajnos 3x3 és 4x4 mátrix lehet, hogy sokkal több, mint egy egyszerű akció forgatást. A megfelelő kiválasztása az értékek a mátrix elemeinek, akkor lehet, hogy a váltás, stretching, vagy bármi más. Ez történik, ha többször szaporodnak a forgatási mátrix: a mátrix fokozatosan kezd termelni nyíró és feszültséget - tíz perc után a joystick, akkor kezdenek látni szabad szemmel torzulásokat a jelenetet. Mivel a felhasználó nem rendelkezik felett a kódot, és nincs módja annak, hogy javítsa ki a torzítást.

Van egy mechanizmus „korrekció” a mátrix. Ha elolvasod a cikket „Barátkozz a Mátrix” ( „mátrixok a Friends”), akkor tudja, hogy képes normalizálni a három sor a mátrix és igazítsa a tengely, így válnak egymásra merőleges -, és a mátrix lesz újra „tisztán forgó ”. Ismételjük meg ezt az eljárást minden keret vagy legalább egyszer néhány képkocka, és senki sem fogja észrevenni torzítás.

Úgy működik tökéletesen elfogadható, de azt vettem észre, hogy nagyon sokan rossz munka a rendszer, amelyben az aktuális forgatást, ami csak a mátrix formájában. Ha például azt szeretné, hogy hozzon létre egy iránytű, meg kell tudni, hogyan kell navigálni a jelenetet. De ezen információk megszerzéséhez közvetlenül a mátrix nem lehet. Így sokan átalakítani a mátrix vissza Euler szögek.

Ha megy, hogy ezt, hogy - valami ilyesmi, akkor megteheti:

Ezzel időt, hogy felhagy a zavaros tömb normalizáció, hiszen minden keretben mátrix visszanyert Euler szögek. Ugyanakkor meg kell óvintézkedéseket, mert ha átalakítani a mátrix Euler szögek, akkor kap egy pár „ismeretlen” értékek az egyes irányvonalakat. Ha a helyzet a megfigyelési pont 90 fokkal elforgatva perdület, míg változások a szögek a dőlést fog a megfelelő hatást. Ezért, bár a pályán and roll + == konstans, a különbség köztük és fuzzy teljesen megváltoztathatja kockáról kockára. Ha csak az elfordulási szög létrehozni, mondjuk, egy iránytű, majd várjon a hihetetlen vallomása bizonyos szögből a henger és a pályán. Ez történik a valóságban - tehát nem különösebben aggódni!

Amellett, hogy az Euler szögek és mátrix-transzformációt, van egy másik nagyon kényelmes módja, hogy képviselje forgatások. Kvaterniócsoport (mint ez látható a cím) egy sor négy szám lehet képviseli, mint egy vektor (X, Y, Z) egységnyi hosszúságú, és a forgatási szög körül ez vektor. Kombinációk elmozdulásvektorból szög változás és kódol bármilyen lehetséges elfordulását.

Ez ugyanaz a gondolat, mint a négy paraméter glRotate funkció (bár a négy kvaterniócsoport, hogy a kényelmesebb számítások eltérő jelentésű).

Nem szándékozom itt részletesen leírni a négyes, de ezek nagyon könnyen használható, mert (mint a tömbök) kódolnak szögek, függetlenül a beadott sorrendben, és. ezenkívül (mint Eulerszög) egyedülállóan kódolni forgatás, és ezért sokkal kevésbé érzékenyek a kerekítési hibák (bár meg kell, hogy ellenőrizze a vektor része a négy részből álló - annak hossza mindig legyen egyenlő 1,0 - sokkal könnyebb dolga, mint hogy normalizálja a mátrix).

További cikkek a programozók.

Kapcsolódó cikkek