Dobry den,
omlouvam se, ze rusim diskuzi k tomuhle tematu. Ale neco honim a rad bych se zeptal autora na jednu drobnost. Chtel jsem se zeptat, zda li byste mi mohl dat tip na nejaky rozumny zdroj, kde se pise o prevodu transformacnich matic na quaterniony a zpet. V nekterem z Vasich clanku tady na rootu jste se o nich lehce zminil a pri hledani na webu jsem narazil na Vase starsi prace, kde se take transformace vyskytuji. Usuzuji tedy, ze se v problematice dobre orientujete :).
Nejpouzitelnejsi zdroje, ktere jsem ja nasel jsou http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
a wikipedie. Bohuzel jsem narazil na problemy. V algoritmech pro vypocet quaternionu maji tyto weby obcas prohozeny index. Takze realna slozka pak v jenom pripade vychazi stejne velka zaporna. Dale se napr. lisi v kriteriu pro pouziti ruznych variant algoritmu. Jedni voli algoritmus podle suma(prvek[ij]*kroneckerovo_delta[ij])>0 (uvazuji tedy jen rotacni cast), v druhem pripade je to pak suma(prvek[ij]*kroneckerovo_delta[ij])+1>0 (uvazuji celou matici). Pro moje data to roli nehraje (zda se). Sice se pohybuju za mezi, ale podle ruznych algoritmu mi to vychazi stejne (ono by to take melo resit jen num. chybu). Rad bych v tom mel ale jasno.
A hlavni problem je, ze pri zpetnem prevodu z quaternionu na matici mi nektere prvky (obvykle dva az tri) vychazi odlisne. Odchylka byva i nekolik desetin. Quaternion mam normalizovany (soucet kvadratu roven 1).
Uz jsem celkem bezradny a budu vdecny za jakykoliv rozumny zdroj.
Diky
Tak kdybych s dotazem jeste chvilku pockal, nemusel tady byt. Na teto strance http://www.cprogramming.com/tutorial/3d/quaternions.html
jsem nasel vztah pro vypocet transformacni matice, kt. nepredpoklada normalizovany quaternion. Takze problem vyresen, s tim ze predchozi mi stejne neni moc jasne :).
Co si pamatuju, tak kdysi davno jsem pekny kod (optimalizovany) pro praci s quaterniony videl v knihovne Allegro, ta jeste existuje, takze by to melo jit dohledat. V kazdem pripade bych pouzil pouze rotacni cast matice, predpokladam, ze v matici nebudou transformace zkoseni atd. Pokud nebude matice presne popisovat rotaci (v horni podmatici by IMHO mela byt dve stejna cisla a dve cisla, ktera se lisi znamenkem - FIXME), tak zpetny prevod nebude korektni.
Kazdopadne diky za tip.
Jen pro me je to trosku kanon na vrabce :). V mem pripade se nejedna o zadne velke programovani. Potreboval jsem jen skript, ktery mi prepocita transformacni matice (rotacni cast) na quaterniony, aby je mohl robot umistit. A pak uz jen ten prepocet zpet, ktery delal hlavne problemy.