|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
( R g% ^# A% X5 F7 z( `2 ~; N3 [
9 }+ e/ v3 S2 V; l2 y$ r/ G' u, u
$ V, p1 P: {+ h8 ?: O2 v
#include <math.h>
+ n& ^ ~2 I i1 b( ]& X//矩阵复制* q% |' G+ @2 P. R0 X
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])) @( _+ F! \0 \, E3 `
{: L3 R9 G: D! g4 ^
int i,j;! Q: K& }2 @$ b1 J
5 ^/ o% P2 t( X: V3 E& R/ G' | for(i=0;i<4;i++)
, m! N; L' [: Y+ |2 q1 F for(j=0;j<4;j++)- U4 z, }& V k4 F8 j
to_mtx[i][j]=from_mtx[i][j];
5 C1 D- [% U4 O}4 l' n( {- E* y0 U i, j% O) y
//矩阵初始化
o4 N8 m5 Z- evoid Project_Matrix_Identity(double mtx[4][4])7 x/ ~* v1 Y, _) w5 g5 K6 T
{8 B; t" B9 Z! |# X; R+ [
int i,j;
. }0 P) \8 g! U ; P0 E6 q4 F3 K, l4 A; d8 }
for(i=0;i<4;i++)
+ O# ~% y, t: S for(j=0;j<4;j++)$ n6 e7 S# ~" _) L
if(i==j)
" _: o; n+ X; c; g# L/ D2 { mtx[i][j]=1.0;2 z' U0 a5 ^- V4 w
else
# K4 O9 J! U! n; g6 T+ Y( q6 [) l mtx[i][j]=0.0;) J: s" K: D8 {6 h* H0 Q
}; M% ^5 ?! O' o1 G7 R
//矩阵相乘
! y3 T+ s$ H' n) m# f& V3 }5 [void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])# o, {4 K& `5 Z
{
4 V7 b( P% R! d4 `% l- ]8 w" K& _( t$ ?
# C( i, v6 t+ n int i,j,k;
/ e: d7 b0 B- } double left[4][4],right[4][4];; A, `! D. b% v/ A/ z `' p
% H) D2 H+ @2 K. s+ e/ F) V8 O* n
Project_Matrix_Copy(left_mtx,left); i. P" D, T4 A, b% [/ n8 o
Project_Matrix_Copy(right_mtx,right);
* u5 i3 T, G$ p2 f4 P0 r for(i=0;i<4;i++)
2 P. N+ x# O5 g0 {& o% s# t for(j=0;j<4;j++)
1 Z+ U5 J+ t) V- d" D! Z8 L4 L {1 n( b8 n; ] J
get_mtx[i][j]=0.0;. S& g% m, j2 P9 T$ T
for(k=0;k<4;k++)
% P- m- B1 W$ f: R. p3 C9 l get_mtx[i][j]+=left[i][k]*right[k][j];
- L9 ?0 n6 K' L4 n3 f' s }( }& [: \6 E+ D
}
3 `% }) L. h @//转置矩阵
: X6 {' \4 `" \ S" w( dvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
4 t5 G' T5 V# ?$ I$ ], l{; m9 Y& Q5 M4 K6 h [, q0 D
int i,j;- A! z* k6 U; U1 n0 ]7 R! w7 ~7 `
for(i=0;i<4;i++)) d: x9 A/ _5 h2 u
{
! Q0 L2 E) R f8 [0 _" A+ ]( Y. x for(j=0;j<4;j++)
, a: d6 b y6 ^. F {: j) C' S% Y$ K
transpose_mtx[i][j]=mtx[j][i];
% }' A+ F1 `) J2 c a! k& R9 E }. ]: \ C. P2 C$ K1 G
}
" e* ^$ |: k) ^0 e! r0 J}) Y3 I% k8 \3 W
//从11元组获取变换矩阵 n4 K( R4 |0 s6 y* r, c j( m! f
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])* X$ p- J W' ?1 l
{
5 p$ F7 i! m" v. A7 X3 X2 h B2 Z7 m+ Z) B7 {0 W4 Q, X
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);
/ Z7 ^8 p- P9 v int i,j;
" }" c& M/ @' Y; c. y9 w f for(i=0;i<4;i++)& O& C f# }9 L; L- @
for(j=0;j<4;j++) m' H( F2 o& u" [
if(i==j)
1 v7 y2 x3 N" W, n/ ~" [# v pos[i][j]=1.0;
& a; w0 y& `7 M" ]9 L! l else3 t7 X: d! @$ O0 w6 l5 O) n
pos[i][j]=0.0;
* X3 O4 D& X2 ^, b S1 V/ q pos[3][0]+=translation[0];4 i) n/ V7 K1 l. o. ~. N0 N
pos[3][1]+=translation[1]; ~/ |, R' B: |6 R! E
pos[3][2]+=translation[2];
- X: U' `! e: n7 L0 s8 x9 S}
. `; m" O& C$ x//向量缩放
; U* Z7 Y' F) x- G J* e& fvoid Project_Vector_Scale(double a[3],double scale,double b[3])
- \0 C7 O, q7 @& d6 t, _{
, H5 i" V" v8 u ?/ r8 W% K b[0]=a[0]*scale;- a* U- l; O# h: r& V
b[1]=a[1]*scale;
1 R1 c) Y9 a3 u! d b[2]=a[2]*scale;# a& s( q+ ]4 J7 d. M
}* a& m( r; V. {4 o: m6 z0 O' p
5 m# n2 Y# _9 @+ Z, P |
|