|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
9 i7 e! W, z, o
1 L9 b3 M6 t0 k5 x& N
9 y. r# @1 @ W6 h- P6 \2 z: u
#include <math.h> 5 P+ g! g: T# A0 l) }& {9 r5 }
//矩阵复制6 J' m1 I! S; f
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
' o/ q0 `8 C0 I$ _3 l/ Q0 ~+ v{% e/ U# h- F6 j
int i,j;
) Y1 B6 z( s! V/ }0 h' }/ b' F1 @ O! X: b3 U
for(i=0;i<4;i++)
) V; Y- ?5 i- C for(j=0;j<4;j++)) _; X/ C! B8 f
to_mtx[i][j]=from_mtx[i][j];4 r) r; r2 y3 _7 ~! I9 k, @! v" T& x
}
9 Z9 C7 _( I) @& u) j" y8 d+ E- w//矩阵初始化
7 y3 D1 a' M: F$ bvoid Project_Matrix_Identity(double mtx[4][4])
; R" J9 g5 Q1 d% b1 J" J{
: E1 O& W- e( R" A1 y8 v+ C3 e" A int i,j;: y8 {$ C- x& G7 P3 v2 P
R" ^% d0 Z R( K4 F7 Q
for(i=0;i<4;i++)
) ?8 h h6 m A% |/ T& T- o1 ? for(j=0;j<4;j++)' \# F6 d( D! [+ G) \4 P3 [$ B. N
if(i==j)
) Q$ ]1 z9 J* w mtx[i][j]=1.0;
; ^: ?" D/ d& r4 X8 E3 { else* @4 j) @, ]* M( M& F' [
mtx[i][j]=0.0;
: S h i( L: ~- x1 d6 x}
: i3 t. X5 N" l//矩阵相乘
, r: Q4 |/ G3 R1 `/ q8 [# Wvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
" z/ K* a+ ]7 c. W6 q{
, k9 k' Y) w, d- r. O2 E' K- ?/ k2 z- }& x3 g" U& }3 c1 W
int i,j,k;
* R. v( ^. Z1 f double left[4][4],right[4][4];
% y% c5 r$ _8 _. z/ l5 E8 Q0 U7 M' N8 I
Project_Matrix_Copy(left_mtx,left);
' e6 f U' R& O/ g' _! _) R |- i Project_Matrix_Copy(right_mtx,right);- e! ]* i) T0 k+ a: q7 l
for(i=0;i<4;i++)
6 b4 U" A. Z3 m; H% N7 g! I' e7 Q for(j=0;j<4;j++)
1 C5 `2 K$ I! w2 e+ T' E& Y1 I {, ?6 u$ S4 T5 Y, h. J
get_mtx[i][j]=0.0;4 Y& p7 k0 r6 I/ L7 j; I
for(k=0;k<4;k++)" u+ q! x, G# f
get_mtx[i][j]+=left[i][k]*right[k][j];
/ ^, F0 u5 a. s7 o6 ]" { }. O7 z1 c$ p. E
}
: S- @* z1 {+ ^0 X9 L//转置矩阵4 J' T* x+ y! Z
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])5 _, ~7 @( Q9 `) M
{
3 u' o: }6 Y- G& y int i,j;6 e) ?& `! O/ X: c8 A: c
for(i=0;i<4;i++)
( b d( [5 R* @* G5 K, J {
* E S2 K8 C4 C4 j' b( F. o for(j=0;j<4;j++)
: D) o/ i( I1 \8 n. V {
) b `) }/ Y3 o5 N transpose_mtx[i][j]=mtx[j][i];: J7 ^4 ^) W4 s) H! |4 O8 w1 k7 K5 j
}
1 l9 v% g: l' F* I" ^% ` }9 Z1 R K2 f& a; d
}
/ S4 K7 C/ T- J0 d$ k2 {//从11元组获取变换矩阵
7 I, X/ r9 r- _' t) ]4 Gvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
5 y% t# Q1 ]$ X$ z- i; f{
( Y: m7 o7 Y- [! U0 w6 T. K' g$ l! w6 g. ^: P2 _: {& R
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);
4 G! R0 c2 M x* W9 Q int i,j;" y {3 t5 x( h+ N( T: o! N0 C
for(i=0;i<4;i++)6 f5 g6 \2 e& g) j% ?
for(j=0;j<4;j++)+ ?3 Q/ r2 s+ B: y _/ d- B
if(i==j)
4 |7 H5 ^6 r2 k. x pos[i][j]=1.0;: U" x7 @5 j3 D0 i A: P3 _8 e# k: I
else
# A" S/ q; \' `, T3 Q: h+ [5 \4 Q pos[i][j]=0.0;/ g& t* H# B% G4 S% P8 M4 |# [2 t
pos[3][0]+=translation[0];
- d/ [1 W1 [0 k6 Q pos[3][1]+=translation[1];
1 G2 }, y2 u' E pos[3][2]+=translation[2];2 U3 H( i# q% e5 U: X( j- k
}
6 q$ k: L4 S, w5 p" R l! r//向量缩放: o7 g- f2 y3 ~7 P! k
void Project_Vector_Scale(double a[3],double scale,double b[3])- O' D" U/ }; a. o
{: g Q( u2 X- J9 b9 X
b[0]=a[0]*scale;
) o+ G2 v* n8 r6 d& d, V/ _ b[1]=a[1]*scale;6 ~; `* X# x2 R( Z; S" I( b$ f
b[2]=a[2]*scale;, c9 X& {. p3 s7 W x8 t! O- L
}
9 |1 u( j2 M, f$ a2 X3 v
p! h B! w: t0 P |
|