annotate quotanion.c @ 65:3e7db5ef4691

*** empty log message ***
author gongo
date Thu, 09 Nov 2006 03:16:22 +0000
parents 0fae5658fb0b
children ce9ef7dcf2f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
1 /*
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
2 * $Id$
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
3 */
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
4 #include<libps2.h>
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
5 #include<math.h>
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
6 #include"mytype.h"
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
7
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
8 /*---------------------------
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
9 $B%/%)!<%?%K%*%s$r5a$a$k(B
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
10 axis : $B2sE><4J}8~$NC10L%Y%/%H%k(B
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
11 angle : $B2sE>NL(B
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
12 ---------------------------*/
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
13 void
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
14 quotanion(FVECTOR q, FVECTOR axis, float angle)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
15 {
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
16 float s=sin(angle/2);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
17 q[0] = axis[0]*s;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
18 q[1] = axis[1]*s;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
19 q[2] = axis[2]*s;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
20 q[3] = cos(angle/2);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
21 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
22
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
23 /*-----------------------
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
24 $B%/%)!<%?%K%*%s(Bq$B$+$i(B
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
25 $BJQ499TNs(Brot$B$r@8@.$9$k(B
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
26 -----------------------*/
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
27 void
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
28 quotanion_rotmatrix(FMATRIX rot, FVECTOR q)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
29 {
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
30 rot[0][0] = q[3]*q[3] + q[0]*q[0] - q[1]*q[1] - q[2]*q[2];
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
31 rot[0][1] = 2*(q[0]*q[1] - q[3]*q[2]);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
32 rot[0][2] = 2*(q[0]*q[2] + q[3]*q[1]);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
33 rot[0][3] = 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
34 rot[1][0] = 2*(q[0]*q[1] + q[3]*q[2]);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
35 rot[1][1] = q[3]*q[3] - q[0]*q[0] + q[1]*q[1] - q[2]*q[2];
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
36 rot[1][2] = 2*(q[1]*q[2] - q[3]*q[0]);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
37 rot[1][3] = 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
38 rot[2][0] = 2*(q[0]*q[2] - q[3]*q[1]);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
39 rot[2][1] = 2*(q[1]*q[2] + q[3]*q[0]);
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
40 rot[2][2] = q[3]*q[3] - q[0]*q[0] - q[1]*q[1] + q[2]*q[2];
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
41 rot[2][3] = 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
42 rot[3][0] = 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
43 rot[3][1] = 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
44 rot[3][2] = 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
45 rot[3][3] = 1;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
46 }
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
47
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
48 float
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
49 degree2radian(float digree)
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
50 {
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
51 float radian = digree * M_PI/180.0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
52 radian += (radian < -M_PI) ? 2*M_PI : 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
53 radian += (radian > M_PI) ? -2*M_PI : 0;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
54 return radian;
0fae5658fb0b Initial revision
gongo
parents:
diff changeset
55 }