|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
v7 u& C4 ~" y$ L7 d# u
: `! `% w4 v' R! d0 ?3 p: u9 ~( R( r
#include <math.h>
) ]2 N0 U: i1 Q//矩阵复制4 F" h: h3 O& W; r6 q
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
2 @& I f4 c) u5 _9 U{
1 k/ P$ x: h9 j7 h int i,j;' m* [! M8 I2 V& @' J4 \9 h
( S* d* J# r; I4 O6 ?2 D& S1 B for(i=0;i<4;i++)7 x2 v7 u6 t* V" e5 i% |" Y
for(j=0;j<4;j++)
, b5 l0 c! c4 l9 q) I to_mtx[i][j]=from_mtx[i][j];
9 y" B0 `- s" n9 G' f0 i7 K! o}% ^% {1 s6 [5 }$ Q. w/ P- P
//矩阵初始化5 g# _: i+ \, T' l" z
void Project_Matrix_Identity(double mtx[4][4])
9 g: N9 ]. ?& \) L% D2 ?{* U5 [% t; {1 S1 o! \
int i,j;: }7 _/ t3 B2 V# I! o% _7 z
* f: n. p+ p* Z3 \2 T for(i=0;i<4;i++)
1 g+ Q2 Z+ h: { for(j=0;j<4;j++)( I5 h L- A w
if(i==j)/ w! o" N o9 K$ Y& Y4 j
mtx[i][j]=1.0;. v# T) O" U. h# Z- Y; f0 R
else
0 ~# P) P2 q% Y1 D; e mtx[i][j]=0.0;8 t2 J8 w8 w' O' Y. i
}
& n; B. M* s( A' C" r% e7 J9 G//矩阵相乘9 J' b9 {2 F8 W t8 Q, @
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
0 k6 |1 Y) `2 a+ ?{; }: B9 e" {8 V4 V) p; q
: w" M, M% a) u& }
int i,j,k;
- v0 P4 r: K6 b* M { double left[4][4],right[4][4];. g/ z/ n. R8 D: I9 J) C) U
+ A1 d) J* N" f1 ?$ z! j7 R' R0 Y* p Project_Matrix_Copy(left_mtx,left);+ m6 b* G' V% }1 @" H6 x% X9 R$ C
Project_Matrix_Copy(right_mtx,right);
" W$ T+ G5 L* H N; d @ for(i=0;i<4;i++)4 w- b- \+ b+ b. F1 I U
for(j=0;j<4;j++)
: t# b- U" O: n) q) x% x {' y* w# }8 T& I0 I0 o! H
get_mtx[i][j]=0.0;
7 U) c' V4 N. l6 X for(k=0;k<4;k++). W4 e4 o, S' R1 L. d
get_mtx[i][j]+=left[i][k]*right[k][j];
: g J, b- c) m0 `& s# D }
+ ^5 m& p% h# E# K}+ @" }- A/ _ L' ~
//转置矩阵5 m1 s, n, a- E$ S& x
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
, A3 i0 Z! v4 t1 v+ p6 o{
* m0 y8 ~+ v# Y. |5 |9 h& L7 a int i,j;; L+ n! Z5 p7 N: N' Y9 O
for(i=0;i<4;i++)
7 V5 }; F; P+ N) v {
( O2 j' x+ {$ l% C for(j=0;j<4;j++)
/ n' g. c, b$ r: J$ J+ w {- N$ x8 Q) H. }; }3 `# D
transpose_mtx[i][j]=mtx[j][i];5 N( l E" _7 g
}2 i2 ^' z2 v% m' Q$ n
}8 f7 M3 h8 k& ?0 X! `
}+ d% l4 V! B8 m1 ?( O! i
//从11元组获取变换矩阵
* ^6 K1 H7 u, O/ ~+ t. Tvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])* p2 P* ~) r# r! x x
{3 V/ s+ O, p" W/ ?. ^# K" T
9 O; ^( x0 n& a/ T* _
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);8 u. e/ R; n- D+ }
int i,j;
/ j* Y2 h4 w! ~1 q1 C/ D for(i=0;i<4;i++)$ g# Z6 j3 B( D; j# v
for(j=0;j<4;j++)
7 b. C+ ~- E) C4 s" {4 J8 }, Q; \ if(i==j)
- Q2 R0 ~0 L; ^& S& U0 u pos[i][j]=1.0;6 e: \' `5 L Y$ d- V. _3 c
else
% c3 X7 T0 T6 J' m4 u pos[i][j]=0.0;$ ^8 Y% w9 Z7 M+ |
pos[3][0]+=translation[0];
5 Y9 z2 S R8 `& D0 n pos[3][1]+=translation[1];
8 P+ }" ]" l6 P2 O+ R _7 A pos[3][2]+=translation[2];
% K, K# Z$ _' C8 U$ Q+ G}
' l S' w0 \: p1 J//向量缩放
, H2 A' U2 g! l& s( p: I0 i' yvoid Project_Vector_Scale(double a[3],double scale,double b[3])2 J( R; V' q- ?7 h
{
& f2 _9 x0 v$ Z( U b[0]=a[0]*scale;2 v' p- L2 ?: F, T, Z7 |- ?: A
b[1]=a[1]*scale;
6 T. u5 a! \( k! X b[2]=a[2]*scale;! Y) y T( z- b& n" L" w
}
6 F: e/ e7 C$ X2 w/ q7 U8 e" I( R
' z' K* `+ s, ^) v$ L/ n |
|