|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 q7 n1 I. R- z
0 _9 L' e O9 C2 @& e, L( y3 ?! t1 n! x, e' W, z
#include <math.h> + ^$ _' v6 u7 B b. K! ~
//矩阵复制
! B- k0 s J9 ?8 ?8 w' [3 w' O( Cvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])- C' S4 {! @* J% h, u0 ]( i
{( x8 X8 P7 m. g* A; ?
int i,j;! X; i& e4 Q8 E* S' y) O6 o
' v: B4 q/ }; {1 }
for(i=0;i<4;i++) N& E- [" m3 _) x$ ?
for(j=0;j<4;j++)
+ D( Q* u5 f. H |% M" K: i1 f2 o to_mtx[i][j]=from_mtx[i][j];5 n5 ~2 H, ^, l, J8 E
}
$ O2 x( z% b$ E//矩阵初始化
2 p& m& z% ? t* X/ _7 Gvoid Project_Matrix_Identity(double mtx[4][4])" m6 J( v% G u4 Y5 E: h W9 U5 ^; e
{' T9 X$ n6 O+ y
int i,j;9 O7 p# [$ y( t
/ t9 N# |6 h* z- `. H for(i=0;i<4;i++)
6 W! ~) _0 x" f# i1 T' w5 S for(j=0;j<4;j++)4 v9 j( z# U/ _% ^
if(i==j)4 ^) I- t9 z( |/ k# U/ u& h
mtx[i][j]=1.0;6 i9 ]: k/ C) S) y& L
else
" C+ J, @ N$ u1 O8 E/ M$ ~6 a4 a4 A mtx[i][j]=0.0;/ y" ]: ` E6 g
}5 u4 N6 ~8 m7 r, x
//矩阵相乘9 t* U7 A" X6 \0 l+ @
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
' r3 z! B6 |1 k: L. j) \) Z0 ]$ O{( {4 l, @/ p) A/ j4 y) k$ K
! y8 {! V6 I# ]. U3 V int i,j,k;
* J: B+ T5 e& e8 W( R double left[4][4],right[4][4];9 l5 d, o0 r, h7 `' q8 P0 v- C* D
6 Q' r* _8 M& e Project_Matrix_Copy(left_mtx,left);: K9 S8 `4 ^- N, ]+ e
Project_Matrix_Copy(right_mtx,right);
9 m3 E6 [# |; s5 i0 E6 ^% F for(i=0;i<4;i++)5 [+ J3 F( ^7 u7 f& ^8 l
for(j=0;j<4;j++)
' v% ]5 C! [8 B6 j$ a3 R/ {' L {- q. c1 N2 A0 L7 W8 C* p
get_mtx[i][j]=0.0;+ E9 E0 T9 p2 c( y. v# B6 K, u2 X# C
for(k=0;k<4;k++)# B) [: d& k. m, q- i
get_mtx[i][j]+=left[i][k]*right[k][j];$ A' r* W# t, r- v
}" _, Z7 {* y, y; @
}6 y/ C* p* z) l/ m! f2 V- s- N5 T
//转置矩阵+ I# b# w3 s- d& e o. L0 r
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
6 o: ]1 n2 o5 I8 m{
( i1 @* [) e% v9 }/ s int i,j;2 t9 P# R4 g- r
for(i=0;i<4;i++)$ i8 `" T- | d& u+ ~# e
{. o4 n* p' {6 Q, G9 ?
for(j=0;j<4;j++)
4 l( q: C+ M5 Y, \; v' Y {
# y9 P6 B3 H5 X6 M4 k transpose_mtx[i][j]=mtx[j][i];
; C4 |+ `$ C8 Q: L' Y }
4 {9 n6 L5 `5 j3 }4 N }
! t7 K$ x- k) g1 t1 [}
! m/ q: b! P) H f) e+ Q//从11元组获取变换矩阵! a+ N" z0 o3 W7 p! t
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])3 d$ F- l9 P( C" f2 k( z; y
{3 ]! U6 E) q5 ], q
4 E) h9 _8 r: n+ c. l8 {) z
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);( V d( {9 a9 ^; v
int i,j;0 P+ S5 q) K( }0 u) T% N
for(i=0;i<4;i++)
t; Z# a- Q+ S# \ for(j=0;j<4;j++)4 D. @8 ^1 N3 V- x
if(i==j)9 q& e* t f1 }0 }" O
pos[i][j]=1.0;9 r* l: ^* T1 P9 U
else' y3 {7 [. J5 v, h ~5 g/ V$ S8 ?
pos[i][j]=0.0;
$ w; W+ j$ C4 A5 u5 j6 v: J. \ pos[3][0]+=translation[0];2 W0 C2 |, Y& N# s& Q! C
pos[3][1]+=translation[1];8 p$ r: X: u, Y+ j& s9 C
pos[3][2]+=translation[2];
8 F) e6 R- f, j! i& C}
9 ]* Z% X& F- ]- }//向量缩放
1 w0 j3 }( L; J# C/ qvoid Project_Vector_Scale(double a[3],double scale,double b[3])
- K6 u" ]* X0 ^' N{" Y! P: K9 q2 B
b[0]=a[0]*scale;, e. c9 [- R' W P
b[1]=a[1]*scale;) [; E2 y' ^/ g+ o
b[2]=a[2]*scale;; ^8 S) G+ }/ s* C0 C- [
}8 ]) E5 a5 O. F3 J
. Z4 E: }7 x! M' C8 A- O" Z) ~: y: F
|
|