.[ ČeskéHry.cz ].
Rotační matice

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Acer



Založen: 08. 12. 2011
Příspěvky: 10

PříspěvekZaslal: 8. prosinec 2011, 19:23:34    Předmět: Rotační matice Odpovědět s citátem

Zdravím,
předem se omlouvám za hloupý dotaz, ale začínám.

Dá se nějak určit rotační matice roviny z normálového vektoru této roviny???
Hledal jsem to všude možně, ale našel jsem jenom určení rot. matice z úhlů rotace v jednotlivých osách. Nevím, no. Celkem bych to potřeboval.

Děkuji za odpovědi.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
cooty125



Založen: 22. 11. 2011
Příspěvky: 40

PříspěvekZaslal: 8. prosinec 2011, 20:02:00    Předmět: Re: Rotační matice Odpovědět s citátem

Acer napsal:
Zdravím,
předem se omlouvám za hloupý dotaz, ale začínám.

Dá se nějak určit rotační matice roviny z normálového vektoru této roviny???
Hledal jsem to všude možně, ale našel jsem jenom určení rot. matice z úhlů rotace v jednotlivých osách. Nevím, no. Celkem bych to potřeboval.

Děkuji za odpovědi.


Ahoj,

jsi si jistý, že to spadá do této sekce? Nevím k jakému prog. jazyku směřuješ, nebo v jakém softwaru pracuješ. JInak bych ti rád pomohl.
_________________
Programátor v C# XNA a 3D Grafik.
http://www.xna.mzf.cz/
http://www.czechcode.hu.cz/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky MSN Messenger
Acer



Založen: 08. 12. 2011
Příspěvky: 10

PříspěvekZaslal: 8. prosinec 2011, 20:07:15    Předmět: Rotační matice Odpovědět s citátem

No dělám v C++, ale nějak nechápu jak to s tím souvisí.
Nejspíš jsem si spletl sekci, jsem tu nový. Tak mi to odpusťte.

Spíš by mě zajímal matematický postup. Neví někdo???
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 8. prosinec 2011, 20:15:23    Předmět: Odpovědět s citátem

no rotacia sa bezne udava vektorom a uhlom o ktory sa ma potocit. alebo teda neviem co ma s rotaciou rovina.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Acer



Založen: 08. 12. 2011
Příspěvky: 10

PříspěvekZaslal: 8. prosinec 2011, 20:19:51    Předmět: Rotační matice Odpovědět s citátem

Moje chyba. Rovinou jsem myslel nějakou plochu(trojuhelník, ...). Takže, když mám normalizovaný normálový vektor nemůžu z něj určit rotaci (matici) té plochy(bez toho, abych znal úhel) ???

EDIT: Dělám v OpenGL Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 8. prosinec 2011, 22:14:38    Předmět: Odpovědět s citátem

Ten dotaz moc nedává smysl:

- rotace roviny vůči čemu? Asi vůči nějaké "defaultní" rovině?
- pokud to myslíš takhle, tak takových rotací může být nekonečně mnoho, takže použiješ buď 1 z nich nebo tam dáš nějakou omezující podmínku určenou např. nějakými vektory z trojúhelníka (např. že vektor AB je "v defaultní poloze" ve směru Y a ptáš se na rotaci, která zrotuje "defaultní" normálový vektor na požadovaný normálový vektor a taky tento jednotkový vektor ve směru Y podle poloh vrcholů AB v zdaném trojúhelníku).

Jinak (nebudu teď na základě obsahu dotazu moc přesný a nebudu používat zažité matematické pojmy) rotační matice jsou prostě 3 vektory odpovídající původním "osovým" (bázovým) vektorům (1,0,0), (0,1,0), (0,0,1) tak, jak se mají zrotovat - takže např. při rotaci o 90 stupňů kolem osy Z to budou vektory (0,1,0), (-1,0,0), (0,0,1) - tyto vektory dáš do sloupců matice a máš danou rotační matici (bacha na řádkové/sloupcové uspořádání v daném API/v dané matematické knihovně).

Takže pokud to vezmeš třeba tak, že "defaultní" rovina je YZ a má jako normálový vektor bázový vektor ve směru osy X, tak matice, která ji zrotuje do polohy té tvé roviny P, bude mít v prvním sloupci normalizovaný normálový vektor P, ve druhém sloupci vektor kolmý na P - buď spočítáš třeba z toho trojúhelníka jako B-A nebo ho třeba spočítáš tak, že z normálového vektoru (nx,ny,nz) vytvoříš vektor (0,-nz,ny) (bacha aby nebyl nulový, pokud by to hrozilo, můžeš použit třeba (-nz,0,nx) nebo (-ny,nx,0) - stačí se rozhodnout mezi 2 variantami podle absolutní hodnoty souřadnice, která se "ztratí" a místo ní bude 0 - je vhodnější/nutné takto "ztratit" tu menší souřadnici). Takto vytvořený druhý vektor znormalizuješ a třetí vektor dopočítáš vektorovým součinem (cross product... a bacha na pořadí ve vektorovém součinu - levotočivost/pravotočivost). Ty tři vektory použiješ jako sloupce matice a máš matici, která dělá to, co si myslím, že možná chceš udělat Very Happy Jestli jako defaultní rovinu budeš brát XY nebo ZX, tak ty vektory dáš akorát do jiných sloupců, pozor na pořadí a levotočivost/pravotočivost.

EDIT:
Nebo pokud ti ten úhel nevadí, tak ho můžeš vytáhnout ze skalárního součinu mezi "defaultním" a "aktuálním" normálovým vektorem a osu z vektorového součinu těchto vektorů (tak to můžeš dělat pro rotaci mezi každými 2 rovinami, první postup by taky pro rotaci mezi 2 rovinami šel použít, akorát by tam ještě bylo násobení jedné matice transpozicí druhé... vždycky tak ale spočítáš 1 z více možných matic, těch možných rotací je nekonečně mnoho pokud ti jde jen o normálové vektory).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Acer



Založen: 08. 12. 2011
Příspěvky: 10

PříspěvekZaslal: 9. prosinec 2011, 14:43:34    Předmět: Rotační matice Odpovědět s citátem

Aha. Nějaký srozumitelný odkaz na web by nebyl???
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 9. prosinec 2011, 15:19:08    Předmět: Odpovědět s citátem

Vzhledem k tomu, že ani po druhé výzvě nechceš upřesnit svůj dotaz a celý můj text komentuješ jen slovem "aha" (místo např. sdělení, že je to moc zmateně napsáno nebo že nerozumíš některým pojmům nebo ještě něco jiného), už k tomu nemám dál co říct ani nemám na co odkázat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1821

PříspěvekZaslal: 9. prosinec 2011, 16:33:33    Předmět: Odpovědět s citátem

Acer, precital si si, co ti Igor napisal? Povedz nam o sebe nieco... mas za sebou aspon linearnu algebru na vyske, pripadne daval si pozor na matike na strednej skole? Potom ti skusime poradit co najvhodnejsie.

Okrem toho, mohol by si este upresnit dotaz - presne nam povedz, co mas, co sa snazis vytvorit.

Strucna odpoved na tvoj dotaz je: NIE, neda sa to z toho.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Acer



Založen: 08. 12. 2011
Příspěvky: 10

PříspěvekZaslal: 9. prosinec 2011, 17:15:11    Předmět: Rotační matice Odpovědět s citátem

Snad to trochu osvětlí tento kód:

kód:

void rotateMatrix( float x, float y, float z)// x, y, z .. souřadnice normálového vektoru "objektu"..
{
   //velikost prumetu vektoru na osy..
   float szXZ = sqrt((x * x) + (z * z));
   float szXY = sqrt((x * x) + (y * y));
   float szYZ = sqrt((y * y) + (z * z));

   //sinusy a kosinusy uhlu vektoru...
   float sinY = z / szXZ;
   float cosY = x / szXZ;

   float sinZ = y / szXY;
   float cosZ = x / szXY;

   float sinX = z / szYZ;
   float cosX = y / szYZ;

GLfloat mx[16] = //rotační matice..
        {cosY * cosZ,                     -cosY * sinZ,                  sinY,               0,
         sinX * sinY * cosZ + cosX * sinZ,   -sinX * sinY * sinZ + cosX * cosZ,   -sinX * cosY,         0,
         -cosX * sinY * cosZ + sinX * sinZ,   cosX * sinY * sinZ + sinX * cosZ,   cosX * cosY,         0,
         0,                           0,                           0,                  1};

//násob modelview matici..
   glMultMatrixf(mx);
}



Takže asi hotovo. Jinak k čemu je to dobré? Netuším. Začínám, tak experimentuju. A tiše doufám, že z toho něco vznikne. Ale myslím, že je dobré něco zkoušet, třeba z toho něco bude Smile

Díky moc za Váš čas. Kdybych měl nějaký další problém, napíšu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



Založen: 28. 07. 2007
Příspěvky: 196

PříspěvekZaslal: 9. prosinec 2011, 18:37:41    Předmět: Odpovědět s citátem

Takhle ten kód určitě není dobře, může tam nastat dělení nulou - pokud normálový vektor bude např. (0,0,1), szXY bude 0, sinZ a cosZ budou NaN ("not a number", který vznikne při dělení .0f/.0f) a některé prvky matice budou NaN.
Nezkoumal jsem to dopodrobna, ale tuším, že ta matice je nějakým vynásobením základních rotací podle os X, Y a Z o úhly, které svírají průměty normálového vektoru na roviny XY, YZ, ZX? Jestli je to takhle, tak to obecně fungovat nebude - každá rotace zrotuje i ten souřadnicový systém, podle kterého proběhne další rotace, takže záleží na jejich pořadí a nemůžeš použit úhly vypočtené v té základní soustavě (před jakoukoliv rotací). Navíc ty roviny bereš jako XY, YZ, XZ, konzistentně by to mělo být XY, YZ, ZX.
A aby toho nebylo málo - každá ta elementární X Y nebo Z rotace souvisí s rotací jiné "defaultní" základní roviny. Pojem "matice rotace roviny" bez dalšího upřesnění fakt moc nedává smysl, zkus si to promyslet.
Příště prosím zkus trochu víc spolupracovat s lidmi, kteří se ti snaží odpovědět.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Acer



Založen: 08. 12. 2011
Příspěvky: 10

PříspěvekZaslal: 9. prosinec 2011, 19:09:19    Předmět: Rotační matice Odpovědět s citátem

Ne, ne. Jde mi o základní rotaci objektu při jeho vytvoření při základní jednotkové matici (proto ta normála). Mělo být spíš: výchozí matice rotace plochy(trojůhelníku). Chtěl jsem vlastně zkusit detekci kolizí pomocí "Backtransformingu". Jako, že bych tuhle matici invertoval a pak už tu kolizi počítal jen z X a Y hodnoty té plochy. Ale k tomu teprve směřuju. Teď dělám takovéhle různé experimenty Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 10. prosinec 2011, 02:15:21    Předmět: Re: Rotační matice Odpovědět s citátem

Acer napsal:
Dá se nějak určit rotační matice roviny z normálového vektoru této roviny???


Slovo "rovina" bych vypustil. Jinými slovy máš jednotkový vektor a chceš udělat rotační matici takovou, která orotuje nějaký bázový vektor (třeba 0,0,1) tak, že bude shodný s tvým vektorem. Pak je to jednoduché.

Rotační osa = normalizovaný vektorový součin bázového vektoru (např. 0,0,1) a vektoru, na jaký to chceš orotovat.
Rotační úhel = úhel mezi oběma vektory.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1821

PříspěvekZaslal: 12. prosinec 2011, 09:04:47    Předmět: Odpovědět s citátem

Ale furt je tam taky malilinky detail - ze ked "bazovy" vektor zvoli nahodne, nahodne sa mu bude aj jeho objekt este stale tocit okolo toho "normaloveho" vektoru Smile A nic s tym nespravi, pretoze to zadanie je zle.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna