|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
; m* I" I/ d: H0 Q3 L! g' _+ X1 ]2 s% Q. @4 S! w: w; J
( _3 ]$ v2 Q; W#include <math.h>
4 d% D$ g3 s- }! M% c//矩阵复制
6 _5 v! ?* p$ ^$ c" yvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])5 B& s+ {/ T0 f3 D0 H
{
# t3 Y! C# T, V/ M int i,j;
; h# H- U# ^: y; {* ^; C$ w! }: g4 Q6 N
for(i=0;i<4;i++)
+ [1 f0 B* X: k8 m; ? for(j=0;j<4;j++)/ @* w2 k. u, E
to_mtx[i][j]=from_mtx[i][j];) ~- w. X" n8 A# p6 I
}5 ~9 a P7 |$ _. ~! A+ Y
//矩阵初始化) V% t4 d2 z( Q" w5 {3 w
void Project_Matrix_Identity(double mtx[4][4])
& l% j' {1 t# o{1 H3 _+ P. n* H. A! w$ m4 k
int i,j;
- }9 ^( H& Z9 {; d2 A& X6 i
; P6 C4 _$ i) I$ L! V. C1 g6 ` for(i=0;i<4;i++)# a7 L1 L4 h2 R$ X& `- H8 k6 X
for(j=0;j<4;j++): `! s- ^* `( E0 r" S3 B0 V
if(i==j)
4 M" M3 u6 p$ o3 v: \& F mtx[i][j]=1.0;% i. K! _1 Q# d" [3 N7 j
else
9 F+ A( V3 S% ?" L% o" W0 U mtx[i][j]=0.0;
. J0 e) H1 P# {3 L4 @3 [}
8 ~. M, G# c2 b& F- r4 K; K* }//矩阵相乘
5 d- ? R8 w- |& X4 Y n! d9 [& mvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
$ r( j' j. ^: y& l) w2 v{
' o% z1 A/ r$ h7 H1 C$ k# b
& z$ C& M) v. b+ K1 P int i,j,k;1 J& v' F( y+ B6 z" K
double left[4][4],right[4][4];
" T: u7 A' }& K0 G2 ~
1 f }/ Q9 k6 t- u% } Project_Matrix_Copy(left_mtx,left);
6 R$ x0 f K7 _! |2 x! X Project_Matrix_Copy(right_mtx,right);# V! ^4 @3 D3 |
for(i=0;i<4;i++)
; ^3 ^+ ?1 D/ } for(j=0;j<4;j++)
, C, n) [: q4 p+ N( R: ?& M$ d {" j; u; u- x% k1 j( N
get_mtx[i][j]=0.0;, |6 k; [; _) U9 b I. J
for(k=0;k<4;k++)6 y8 P; _. X2 Y. `( M. f* f
get_mtx[i][j]+=left[i][k]*right[k][j];3 a/ ]/ z- J/ X; W9 F
}- V1 s( w9 J* C; Q. {6 I
}
$ [6 Q5 ~8 ^) K5 `8 K& D//转置矩阵% e% q& j1 X; C4 x
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])( Q I) o0 |1 g+ m- n& e( F
{
7 ?: _1 j9 G* c B) p4 w2 z* t3 _3 p int i,j;1 @0 ?9 W7 I- U* V+ H! d8 p( P+ p
for(i=0;i<4;i++)
) B1 k( N+ f! |. O9 C {
+ t" z) l* q$ o5 l3 m5 a1 H for(j=0;j<4;j++)
. ~, C9 d4 D, W) [: ]6 c- {' X% \ {
0 B: J% Z0 G8 L" U! R6 B transpose_mtx[i][j]=mtx[j][i];7 M! o n7 N1 B0 {+ n; u
}
o5 e( H( J; W' s& e }
. h2 @9 y0 q! D2 t* G}4 g# ~7 y, R9 E8 p- j6 L
//从11元组获取变换矩阵
+ v& e! x, O7 }7 A8 ^; f! I6 v1 Mvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
! u- r0 H* a* ]{
t( ^; ?) F$ V+ t5 T9 m/ n* ~
$ R% n" ~9 B" l% P6 ] //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
: Q6 l( H K! o# S int i,j;
! }5 j8 U5 |3 s for(i=0;i<4;i++)& w5 B8 k* s2 g) H# z: c8 O
for(j=0;j<4;j++)- o0 E/ a( r+ y2 e$ j/ X7 {. _- e0 Y
if(i==j)
( `: C0 o e) x pos[i][j]=1.0;( T0 M' _7 i6 [
else
% L3 L I+ A$ h% G) h( J pos[i][j]=0.0;
; _+ E9 S2 w1 s3 ]1 r pos[3][0]+=translation[0];- {6 _: E x! Z4 x8 T) X% @# {
pos[3][1]+=translation[1];
" o* c$ L- h& f" m3 K9 u3 a# H, C9 t pos[3][2]+=translation[2];
: |" J- b5 D7 d- J6 K) o}* e' e5 h7 ]+ J3 J' y9 p: f
//向量缩放
" ^2 K3 y' C) \# j9 s9 u$ \void Project_Vector_Scale(double a[3],double scale,double b[3])9 b |2 a6 v( \9 R
{" I% u. [+ R7 d8 J8 O/ S4 O
b[0]=a[0]*scale;- M! r5 b, C7 P6 A1 E+ O
b[1]=a[1]*scale;
8 s* R |5 e& b( ?$ S1 b0 x% ~ b[2]=a[2]*scale;
; P8 a5 P: T4 w$ p! V9 R' z2 G}+ y5 k3 t1 ?( u+ L! I4 m6 L
9 q# b+ S [! V# i Y
|
|