|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
8 g6 n6 Z, Y- o7 d8 r0 }( M- ~" H6 L8 T
! r C% ]% W; O- {, C. ^
+ s( T; S; e5 g# C) ^- p: h#include <math.h>
8 r6 z" P: Z5 F+ P8 _( {* h6 K//矩阵复制& ]' f. M$ Z! t- {7 i
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
9 _* f4 ~6 a9 F4 [% s9 T/ L" M$ b{2 P: K4 ?3 ~- w _3 R
int i,j;
1 C" Z' Z f' H; j
& j1 f; h! |8 ?5 ^* N4 g# o4 r6 @- Q for(i=0;i<4;i++)
6 ]3 \5 d/ M0 d; ], }' B7 \ for(j=0;j<4;j++)
& a+ o" B- [. \; p) H to_mtx[i][j]=from_mtx[i][j];' u% e& {4 _! Y8 D7 W9 }# \* l
}
# b$ n1 p _- V" U; z$ q//矩阵初始化) g ]% U' {/ t1 B4 |
void Project_Matrix_Identity(double mtx[4][4])
+ m7 O4 |( m6 J2 Y6 X8 J# H{6 K5 o3 ^% K2 g E% y+ Y9 B
int i,j;
0 H8 X9 `8 D7 i, r
+ n) B+ C% s X7 d; ?, M for(i=0;i<4;i++)$ K- ]* t; e, M! H: A$ { a; r
for(j=0;j<4;j++)# v7 m1 |* b- e1 @3 z
if(i==j); I, o# l6 A: M \" z9 @) i
mtx[i][j]=1.0;
* ?/ Z6 y( c4 | else
' i ?7 Q; G% I9 R Y/ s# c mtx[i][j]=0.0;
8 I2 ^9 H4 L+ f7 W1 z% O3 T}
6 u) J( e1 @; g, G! `# \( D//矩阵相乘
# ]7 ]. V* B$ Cvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
0 `* m: D, I8 W; p4 W* [4 R/ ^0 r{
7 U1 d) z/ t4 N0 ~1 j9 Z) b8 I
; n' f$ p& D" H9 ~/ m) k; H int i,j,k;
4 z* c" _# U- _0 I: h1 g) ?# c double left[4][4],right[4][4];
. ]$ e9 o/ t5 \- c. c* G. k3 G( ?. J: ?
Project_Matrix_Copy(left_mtx,left);
) E u/ i0 z/ A( |! c Project_Matrix_Copy(right_mtx,right);' f, b. H. h' u" }) r7 P. O
for(i=0;i<4;i++) e M9 e) \( Q1 O
for(j=0;j<4;j++)" M1 W1 M; [; M; n: Y
{
0 V. R; U% \( ^: h5 P0 @) w get_mtx[i][j]=0.0;
) T8 F @9 s8 ^9 i H* O o for(k=0;k<4;k++)
4 ~# ~! a* o# r# A get_mtx[i][j]+=left[i][k]*right[k][j];
6 A# B7 b+ d" j A. r* F8 B }
: j9 a. S1 c7 A# K0 W+ s" K}1 \, I" M5 _1 ?6 s: N5 u1 n
//转置矩阵
; G! r9 r/ A. C& Y0 [void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])4 k* j/ O: G5 j$ R4 {# o2 z
{ G8 Z- S$ g- m- i& ~8 U
int i,j;
- {& G: \4 C0 r B for(i=0;i<4;i++)- C8 y0 g6 n' i# g, I5 H; m/ C
{
4 n4 N o% b$ ]5 P: W for(j=0;j<4;j++)' p3 ]$ r! H: z9 w, S! x* ]
{9 q9 B! }7 {+ {$ t ?# Q" O% `0 l" m
transpose_mtx[i][j]=mtx[j][i];
* K* P9 K8 n" O! ?$ }. F$ U9 ? }. j" V1 t$ N1 S6 T
}
* a/ j4 A$ S% |}
- ?: A9 H% p f8 P( V//从11元组获取变换矩阵
1 l3 Y: J Y7 ~, v0 Jvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
" y, |3 T& E/ d* i: `1 J1 O; V{
2 w; A" X$ p" v3 w- X& R X2 x# c O3 v J8 u
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);9 f4 y( W6 n6 L& P
int i,j;
2 m9 z& M0 T5 S- W% N' l$ B for(i=0;i<4;i++)
3 P' K) ]4 U6 o for(j=0;j<4;j++)
7 B: k h6 l& l: m5 C: O. i if(i==j)
4 u$ ^- m1 L& J N7 b( i pos[i][j]=1.0;
- z" f: R% R, S0 e else
/ y! @' q6 t% i0 ?4 S$ u pos[i][j]=0.0;
* \6 r$ L& ^7 L pos[3][0]+=translation[0];
5 M* v6 t5 k3 j) K p: N% [ pos[3][1]+=translation[1];
5 N# b$ L/ h/ x7 D) q; `, `# S" E5 Z0 Z pos[3][2]+=translation[2];- M/ v& T8 b! d: Y
}
9 ?0 ^5 Q+ B* k2 J//向量缩放
2 _- X3 N: I. V" O- Nvoid Project_Vector_Scale(double a[3],double scale,double b[3])
$ S$ m6 O. G7 B( K: ~9 v; e{9 N. [* G+ p" T, t, [, D, Z: @
b[0]=a[0]*scale;5 \: G8 K \0 R4 c, x# m6 j
b[1]=a[1]*scale;/ F- E6 P4 A4 H, V2 _
b[2]=a[2]*scale;5 W8 b1 ~" o: q& J
}0 j' [. ~- T) c$ \$ ?3 K
" S1 M0 F% k; Y
|
|