|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
) h; { y2 M; l: |4 [& c' C
6 p5 L4 \, D% z2 e o" u" w/ p" V1 s) ?9 m
#include <math.h>
5 l0 U6 L0 D( K8 ~ B/ S# w4 R* I//矩阵复制) I5 C. C+ L- U2 o3 O
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
; R; z$ G, w% \& h{
1 o, l @6 F [% C7 ? int i,j;
2 x& `* Y6 x2 [4 E5 ~* x- r* |: \ L1 g; w
for(i=0;i<4;i++); ~" @: ]" W$ m, m! S$ C
for(j=0;j<4;j++), m% E q9 a3 c' U5 I; L1 K
to_mtx[i][j]=from_mtx[i][j];
: _4 ?2 P0 L6 _; |/ s! b}7 C. l* n% G4 w7 N
//矩阵初始化! s* X# {5 e3 ? I* u
void Project_Matrix_Identity(double mtx[4][4]): o, z6 y! k( A# i$ Z7 u3 R
{
2 J# ?8 b0 x C* e) \- J! Z int i,j;
. R" g3 t8 F# ~" F7 t3 } K
4 ?0 z5 g/ |7 a5 C& Y2 w for(i=0;i<4;i++)5 I. ^, D8 J) Q+ P- o4 b& u8 N) Y
for(j=0;j<4;j++): J) Q, j4 a6 R+ L; n
if(i==j)
1 }; w9 p! R' i4 H0 L9 o2 n* I4 H mtx[i][j]=1.0;
A% T x% Q( S) h; i0 y! P6 j$ C else
! p( A) |: T8 B7 G0 _ mtx[i][j]=0.0;
6 e7 G7 ~; Y1 _: }4 n) u, }/ C9 v}
. }9 M+ ?" d& m//矩阵相乘. q6 G6 X; V+ M! C3 R
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
/ y2 m x, M4 I1 @8 h{
, }6 L N) @+ ~% U( K
0 j0 C# t- w. Y, z% D int i,j,k;
: P4 F" w4 q' p0 w1 ]+ o double left[4][4],right[4][4];
, I5 a/ B% ^2 Z5 |' z
( ~* V6 l( o. ]* p4 j% i Project_Matrix_Copy(left_mtx,left);
; T! X- V0 {1 R' E6 _, H' p Project_Matrix_Copy(right_mtx,right);( @5 n- a- }4 f9 w1 v
for(i=0;i<4;i++)7 f' A% ^6 k& q2 e( z
for(j=0;j<4;j++)
% }: Z) |4 R" ^# ]1 I {2 G. M! _0 Q! i, c0 K
get_mtx[i][j]=0.0;; ?5 f! J0 M" B7 @5 z. D% v6 S$ F
for(k=0;k<4;k++)
: W8 B" r+ l& B u* I3 V* ~ get_mtx[i][j]+=left[i][k]*right[k][j];# E) R6 n v6 W
}
& Y1 q9 r+ _4 n8 i, h}
. b& ]! [( |3 e; u4 D: I2 e//转置矩阵
+ C: ^; Q3 Y6 c; o- [void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])7 w6 k* v8 H8 O* e( y
{
' X- D& L5 l+ ]5 O5 U2 b, t2 ] int i,j;
& f+ {3 H& y9 l, w. m) M8 E for(i=0;i<4;i++)" ?7 d, V- s$ j4 a" Q2 R
{& t0 l8 {, s! f' W' X O7 l
for(j=0;j<4;j++)" r6 X6 V' @1 {1 K6 E7 r
{& c8 r. h( @# }% \% l/ N
transpose_mtx[i][j]=mtx[j][i];
4 V3 Z' o% `. G( ^3 z }
: Q) u- u% l; Y& f1 Z! a# J- k }
6 V$ P" y. v3 F% T+ F* h}8 T6 ?3 t; I8 i' U
//从11元组获取变换矩阵
$ J4 m. K# L: C; M, S' bvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
$ K4 f% \8 Y0 G1 @{
' a, n8 @+ _+ D' K: g' w
: j+ B8 w8 y T- _5 E# I2 c, ]4 K //Project_Matrix_Get_Rotation(rotation,point,angle,pos);$ l a( n6 o3 B
int i,j;& ^8 \4 V0 Y- b/ [: A$ l; ^
for(i=0;i<4;i++)2 g" \* |5 w) Q" c7 X1 w* \
for(j=0;j<4;j++)
4 Z3 N! h" t) U [2 r4 u if(i==j)
9 X9 W) ^3 I/ n pos[i][j]=1.0;, {8 \ i0 `- e. O/ N# ?1 M: p
else X: Q2 y) O0 p) B3 V
pos[i][j]=0.0;" d( t' U4 M; K
pos[3][0]+=translation[0];
- s. W( D. c q5 B7 C! U pos[3][1]+=translation[1];- V q% T% W! j8 }9 g2 _' J7 w0 N
pos[3][2]+=translation[2];& y5 y% |3 G6 H2 n, k9 d7 ]
}6 H; K) ~9 Y! v9 J. D3 A
//向量缩放* _/ a8 K. ?! h: i* W
void Project_Vector_Scale(double a[3],double scale,double b[3])
$ c3 R) e/ P9 z( w$ C# \{% L- {8 T; r; d& O A
b[0]=a[0]*scale;
8 t. O& A% g- b8 T* i b[1]=a[1]*scale;' a2 f2 x* w2 K
b[2]=a[2]*scale;0 {$ M+ D' e# u# Q
}0 o3 Y5 f- [0 |. e
+ w; n9 T) o" R, W
|
|