|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
) K7 E4 c8 K( r. K2 I a" N8 _3 b6 I0 z& }
% r7 T7 i/ K3 ~8 W8 h1 t# d( k
#include <math.h>
1 A& W/ l8 s: N- v m: ^//矩阵复制
$ H( ] q$ J5 Y4 p+ dvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4]); A$ D# R$ y/ p
{7 M0 M/ M9 n8 w3 q" M/ N% d, P
int i,j;
& n9 g& w, z. F" U& k3 A1 q/ z3 ?: G, ]) d% `/ v9 q" T" n
for(i=0;i<4;i++)' `& M% ]7 [& G" e8 Y% N1 v
for(j=0;j<4;j++)
$ ^* S9 S0 F/ G4 A1 z to_mtx[i][j]=from_mtx[i][j];4 H$ R3 [$ ^) Q
}
. T* J# P: ]7 ^' R0 i//矩阵初始化
, [! O4 _$ u' I' I6 j7 Bvoid Project_Matrix_Identity(double mtx[4][4])
% S/ o. Q6 q: t5 ?2 s. Q& Y{) P0 n; j( l8 W L7 R
int i,j;
8 X# G' _' D0 X% d4 t0 K0 } 5 c: \- N) F7 C2 Q% w2 D; G4 w
for(i=0;i<4;i++)
, F! l/ @8 H f$ g; S for(j=0;j<4;j++)
. d+ a3 m5 Y2 T: G9 \ if(i==j); G* H! B3 e9 x7 q; O, ?
mtx[i][j]=1.0;1 J" v7 Z; X1 b3 K J+ V* W
else% t7 H% B6 l0 Y' o* j
mtx[i][j]=0.0;
0 [( W2 k1 V3 N# o}# |( \" o" R5 `, |; v
//矩阵相乘
/ l# D \. B& g `- Kvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])* [7 U& m1 ]" K# e# p0 E( R v
{- N; m( l G7 \5 |, @$ Z n$ p8 y
- E# u5 n1 C$ Q int i,j,k;
; {% V& I" t' c7 }# W9 |1 T/ j double left[4][4],right[4][4];
$ R* O! E# l* a$ R f, X+ o. c! v8 a. U
Project_Matrix_Copy(left_mtx,left);% A' b& }3 W, c# ^* G. v5 R
Project_Matrix_Copy(right_mtx,right);# g: k: N) l1 O5 p: ~
for(i=0;i<4;i++)- s. r0 r: h) S& T1 W
for(j=0;j<4;j++)4 p; q! L# {6 f. P' X4 |# X& B) R
{# f* w a- Y% H% b- D5 Z4 }* ~& ?- p$ p
get_mtx[i][j]=0.0;
& P) k! Y, h. B: K7 \4 q# c for(k=0;k<4;k++)" e2 d1 Z# X K: \
get_mtx[i][j]+=left[i][k]*right[k][j];2 i! L! U. {' |- t- {3 Q1 U. L! Y
}
9 o5 }" B. ^; k7 o- d# w}
! e$ Z& r: Y/ @3 f2 h6 y//转置矩阵2 r- t+ @ j! a% A6 L
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])% M) T* U; D4 X' |" }5 O
{" ?4 l+ K3 b* ]
int i,j;
+ H! |( z4 b9 T for(i=0;i<4;i++)
! I% ?- x) W1 u- F4 h8 } {
. Z1 w2 D" f1 m9 k2 O) Q* Z for(j=0;j<4;j++)8 X1 h; e4 }0 L0 S( E
{
/ |+ O- c& D, B transpose_mtx[i][j]=mtx[j][i];& ?% |" U! k% c2 \) y4 `( G: g
}
" j/ G S7 X9 p- o }- u/ O7 G& U4 R( H! u5 ^
}
/ u# n$ U3 d) v2 G$ ^. P% f//从11元组获取变换矩阵3 {5 c+ I. [7 N2 z
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
* K: P8 e) }; b{
. [; [6 T& k/ \, X: X1 ~3 L
$ W2 s* t% i% }. v* u' M' |, @ //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
; A9 B/ d. I2 [ int i,j;
/ o2 a' H5 U* d3 y for(i=0;i<4;i++)
2 B: \$ @2 J1 y0 W1 _9 P% \ for(j=0;j<4;j++)$ n9 w: s- o4 `3 O' B
if(i==j)1 {5 a1 _) `. n ~- }: |1 y$ p
pos[i][j]=1.0;
( G/ S. t: F/ Y. J else
7 E! G+ |1 \& v" M% b/ L pos[i][j]=0.0;
|# a( k# I, s& E' W pos[3][0]+=translation[0];
( V+ |6 I( |: v; G$ y. ` pos[3][1]+=translation[1];
- L) j u0 \2 q7 O7 T* [: _ pos[3][2]+=translation[2];4 q! n$ P6 U& ?; B
}. z( T0 s, v; Z2 ?5 x1 r+ {
//向量缩放
) i: \; J6 {( m5 _: T7 Wvoid Project_Vector_Scale(double a[3],double scale,double b[3])
I$ k c- r) q/ G5 `( q% K{
' f2 G2 w. m" h0 ~) e: Y" @ b[0]=a[0]*scale;! K- _8 }0 \ E( h0 T. \/ ]4 D3 K4 [
b[1]=a[1]*scale;
1 }. V4 A/ L$ S- F b[2]=a[2]*scale; u- C l: M2 o, r
}, a2 n. B* v9 [! p
' e" Y5 [8 f% k* Q |
|