dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Rotaaciju matricas

 
dev.gamez.lv Forum Index -> Matemātika un fizika
View previous topic :: View next topic  
Author Message
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Sun Apr 10, 2005 8:53 pm    Post subject: Rotaaciju matricas

Gribēju uzzināt, vai tad, ja izmanto matricas rotāciju aprakstīšanai ir jāraksta visi trīs veidi( pa katru asi x,y un z), vai arī ir viens kopīgs veids(uzreiz visām)?
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Apr 10, 2005 8:56 pm    Post subject:

Pēc matricu īpašībām: V*M1*M2 = V*M, kur V - vektors, M1,M2,M - matricas, un M=M1*M2.
Tātad, ja tev ir rotācijas matricas katra ap citu asi - Mx, My, Mz, tad lai vektoru pagrieztu ap visām trim asīm, tad var reizināt v*Mx*My*Mz (skaties tikai, lai kārtība pareiza), bet var arī iepriekš aprēķināt M=Mx*My*Mz, un tad tikai reizināt vektoru ar vienu matricu - v*M.
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Sun Apr 10, 2005 9:04 pm    Post subject:

Intereses pēc: kāpēc kārtībai jābūt tādai? Summa taču nemainās, ja reizinātājus maina vietām! (par matricām īsti nezinu)
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Apr 10, 2005 9:11 pm    Post subject:

Matricām mainās! Ne vienmēr A*B = B*A (A, B - matricas). Protams, ir gadījumi, kad izpildās, bet ne vispārīgi. Kārtībai nav jābūt obligāti xyz, bet gan tādai, lai pašam nesajuktu kas. Jo, piemēram, pagriežot par 90 grādiem ap x-asi (objekta kordināšu asīs), y ass pārvēršas par z asi, tamdēļ vairs nav vērts griezt ap z asi (gimbal lock). Protams, tas ļoti atkarīgs kā tu izmanto šīs rotāciju asis.

P.S.
Quote:
Summa taču nemainās, ja reizinātājus maina vietām!
. Man tur nebija summ rakstīta, bet gan reizinājums. Summa sastāv no saskaitāmajiem, nevis reizinātājiem ;)
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Sun Apr 10, 2005 9:16 pm    Post subject:

Ok, Ok.. Reizinājums - kļūdījos Embarassed
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Sat Apr 23, 2005 7:39 pm    Post subject:

Es izmantoju rotaaciju matricas, bet ekraans shausmiigi raustaas, esmu izmeeginaajis dazhaadus lenkus, bet vienmeer vienc un tas pac Mad Vai kaadam arii taa ir gadiijies, un ja jaa, tad kaada ir izeja
Back to top
View user's profile Send e-mail
vampirelli



Joined: 06 Dec 2004
Posts: 36
Location: maaja

PostPosted: Wed Apr 27, 2005 2:52 pm    Post subject: jaa

Man kaadreiz bija taa matrica, bet es no taas neko nejeedz, jo ka es to apnjeemiigi petiju, es maacijos 9. klasee...
_________________
kas i ko
Back to top
View user's profile
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Thu Apr 28, 2005 4:28 pm    Post subject:

Tev vajag nosaakuma uztaisiit Identity Matrix
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

un tad roteet un dariit visu paareejo
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Thu Apr 28, 2005 7:14 pm    Post subject:

Taa jau arii ir, te buus kaa tas viss izskataas:
Code:
void cCamera::Rotate(float angle, float x, float y, float z){

   float c = (float)cos(angle);
   float s = (float)sin(angle);
   float t = 1 - c;

   cMatrix4x4 mRot;
   mRot.Identity();
   mRot.m[0]=t*x*x+c;      mRot.m[1]=t*x*y-s*z;   mRot.m[2]=t*x*z+s*y;
   mRot.m[4]=t*x*y+s*z;   mRot.m[5]=t*y*y+c;      mRot.m[6]=t*y*z-s*x;
   mRot.m[8]=t*x*z-s*y;   mRot.m[9]=t*y*z+s*x;   mRot.m[10]=t*z*z+c;

   cVector3 vView = vector3.Normalize(c_position-c_view);
   c_view = c_position +mRot*vView;

}


Sho koodu panjeemu no viena raksta, un vinjam vaidzeetu straadaat, tach taa nav, un viss raustaas.

[EDIT]
cMatrix4x4 ir klasse ar float m[16]
Back to top
View user's profile Send e-mail
Angel



Joined: 02 Jan 2005
Posts: 113
Location: Latvija

PostPosted: Fri Apr 29, 2005 4:01 pm    Post subject:

veel tikai gribeeju zinaat, kaa ir pareizi 4x4 matricu reizinaat ar vektoru(x,y,z).
Kursh variants pareizs:
1
Code:
vResult.x = m.field[0]*v.x + m.field[1]*v.y+m.field[2]*v.z+1;
   vResult.y = m.field[4]*v.x + m.field[5]*v.y+m.field[6]*v.z+1;
   vResult.z = m.field[8]*v.x+m.field[9]*v.y+m.field[10]*v.z+1;

vai 2
Code:
vResult.x = m.field[0]*v.x + m.field[1]*v.y+m.field[2]*v.z;
   vResult.y = m.field[4]*v.x + m.field[5]*v.y+m.field[6]*v.z;
   vResult.z = m.field[8]*v.x+m.field[9]*v.y+m.field[10]*v.z;

(atshkiriiba ir tikai "+1")
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Apr 29, 2005 4:12 pm    Post subject:

Nu pirmajā gadījumā tu reizini 4x4 matricu, kurai apakšējā rindā ir vērtības (1,1,1,1) un labējā kolonnā (0,0,0,1) ar vektoru (x,y,z,1). Otrajā gadījumā tu reizini vektoru (x,y,z,1) ar 4x4 matricu, kurai apakšējā rindā ir vērtības (0,0,0,1) un labējā kolonnā arī (0,0,0,1).
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Matemātika un fizika All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group