|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
" e4 `1 q; Q8 K9 G1 V6 R6 C- V
" k5 V! m9 m9 N8 q
1 F9 l& N( E4 j( |#include <math.h>
+ W; [9 h7 B3 j3 h//矩阵复制9 @3 x u; R+ a' \
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
% N" `/ K3 m; D& z# n9 ]) ]{
* @% W7 _8 W- F- d. N! M, e4 R( I int i,j;
, l" O* G+ k5 }. q. r7 q0 ~% o7 o
6 p% v2 M' j) d- E- O L for(i=0;i<4;i++)( P1 y6 v6 ]7 h
for(j=0;j<4;j++)4 n, z6 G3 v, ^3 D; x- ?( Y
to_mtx[i][j]=from_mtx[i][j];4 ]4 k; [( u! s
}
4 a; F& d: X, [//矩阵初始化
! t! p0 v' S/ }, A5 q& p3 Rvoid Project_Matrix_Identity(double mtx[4][4])0 ~ a# ^- T: W7 f; j T& i9 N
{! O5 x2 O C3 ~& c" W
int i,j;
5 d+ n5 F/ Q/ q $ D; n t$ x ^5 g. y
for(i=0;i<4;i++)
) b' k5 v% R: J. B* T3 L' E- Q5 `4 N for(j=0;j<4;j++); |" d, E) w8 c* g5 F
if(i==j); H: E+ T% p4 m, [% J6 j9 A
mtx[i][j]=1.0;( a/ D8 P# d( m0 k( V
else/ g! g9 ]" }" L% ~5 g
mtx[i][j]=0.0;* [* |5 S4 _ a7 C- g: A
}0 N3 t9 K; C- q8 l0 h+ Y/ a% a. B
//矩阵相乘# m$ P4 _- g! w% Z
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])& d, }% T5 S! K" Y; [$ M
{
1 w0 B& P% G. ^6 f/ O
, b H; S9 X0 z p, T int i,j,k;9 L2 p1 B5 b2 i* J
double left[4][4],right[4][4];
1 y4 q( u: z# m- ]1 C9 p- f- x/ }% D0 z& `
Project_Matrix_Copy(left_mtx,left);: j/ w5 \9 }4 k2 B( W; q' Q4 ]
Project_Matrix_Copy(right_mtx,right);3 S; j f5 G* h( ?. ]6 {/ {
for(i=0;i<4;i++)
, ~* M. i+ H* Y" s for(j=0;j<4;j++)
! J3 e+ X( F# d, Q% a, Z9 t {
) u( p% l' T4 i+ P2 k* |9 K get_mtx[i][j]=0.0;1 o7 S3 @4 l, q/ m9 O
for(k=0;k<4;k++)
% T; B i6 {6 \0 i1 E get_mtx[i][j]+=left[i][k]*right[k][j];6 G1 S s! B2 M! q6 l4 x
}$ H+ c% n4 c; A* _/ p
}
: f" s2 u7 G/ a+ x' Q//转置矩阵& a7 r$ B+ `; F$ j
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])4 p/ ? O" A* F( K$ l
{
& ?( y: _# E j- ]6 i$ P int i,j;
# I. A' a: z% ?3 | y: W% a for(i=0;i<4;i++): F( s% ]- Q9 \5 h5 ^1 w) I0 H3 ]
{
- E8 s, \6 [( i1 ] d) o; s- X for(j=0;j<4;j++)
/ I. I$ ~5 {) O {6 x$ p+ h5 {- ^3 V! v8 G; t
transpose_mtx[i][j]=mtx[j][i];! s0 z* g q6 r- D$ q4 s
}( g, h5 _+ M# v( X! Z
}: h3 x6 z7 X; }9 m, z9 u2 d
}
/ s% q8 U2 m3 }! l; E//从11元组获取变换矩阵. T# ~& p$ l) T+ [; f8 q
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])% E6 j, H7 @% {, A
{
* Y j" o3 w! h9 J4 j i5 K4 O* r$ t( ^6 k3 _" q# E4 P0 |
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);
( e* s8 Z; @4 d7 y B int i,j;% {. \/ Q4 x7 v& `" J+ M# M8 H' s
for(i=0;i<4;i++)7 n2 {1 i; p4 w+ Y! ]
for(j=0;j<4;j++)' z% R( }& j. ~& Q- r
if(i==j)
$ h# _( p/ Y& g$ F1 K4 v& ]; d pos[i][j]=1.0;! A# u1 r! i' z' D5 H, `+ g& c
else. ~% q" z. z4 N5 J7 N f9 U
pos[i][j]=0.0;
6 q" c2 N. Y! B' y% ~ pos[3][0]+=translation[0];
8 i* F% V7 l# s, X, X6 E pos[3][1]+=translation[1];1 n9 K- T' f ^9 C6 U4 f7 i6 ^' z3 ]8 h
pos[3][2]+=translation[2];
0 y% ?8 f1 p; w. i2 X9 ~' U}
9 f& [$ S+ x- O6 Q) Y//向量缩放
( T5 K$ X+ f4 ]3 {' Z4 R+ _void Project_Vector_Scale(double a[3],double scale,double b[3])
9 Z1 Y$ @+ T$ |2 S{, Y3 @. E7 ?" [6 |6 C' n
b[0]=a[0]*scale;
) I* S* U) [* R" [ b[1]=a[1]*scale;0 ]+ p/ h. t" O& s, I
b[2]=a[2]*scale;
6 r) w$ g: e2 Q! R}+ s% A" N4 Z, G/ S- a* ]
7 a, ^7 r# m. ^0 `' o% | |
|