|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
- Y. i9 z1 m" o; ^: B( d/ }) ~! ^( y- H+ }! ~
, t m: t$ Q/ E
#include <math.h>
( @* `! Q+ e) _% W' V4 J; J: }//矩阵复制+ [& F7 @3 Y2 z, z
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
/ b4 Y7 H# z/ ]4 s{
1 {* l8 M: l% U( J( X1 V4 q+ C int i,j;
. ^3 e R3 q( V
0 R% ~" |/ j* G2 w7 H& ]8 G for(i=0;i<4;i++)
, [1 {* Q, A' ^ for(j=0;j<4;j++)4 j) T" w. B3 C2 g
to_mtx[i][j]=from_mtx[i][j];, p* Z' N8 c5 O3 {7 |4 ^
}/ P0 r* x3 W; ], G
//矩阵初始化
) l+ K6 l/ Q% I1 avoid Project_Matrix_Identity(double mtx[4][4]): v$ _4 o5 o3 g! {. a
{6 J* q" @/ a& C" S X
int i,j;
& A2 l8 c. D; R: J8 ^9 ^; t9 r2 d
* A% i' S* v1 i& f% A for(i=0;i<4;i++)& D$ d* g2 s K7 F3 w, B1 @
for(j=0;j<4;j++)8 A! \8 ^$ O# W4 L) A2 S/ M# J
if(i==j)
7 v( b* z" x& u% R8 I( b mtx[i][j]=1.0;
8 [3 D1 e) f4 |1 e else! \9 W( {# V! H& e% }
mtx[i][j]=0.0;
3 Y: g1 {# L5 @& M/ k! e4 g' z! }0 P}
$ d! [* w, x% |: z! Q//矩阵相乘- f* ^0 {; P$ C! I
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
8 o# y! ^% z' R3 {% o{
( }* |3 d& Y& S% [5 U. c* y$ P1 D. E8 N& u* S
int i,j,k;5 t4 X! A/ c2 B0 Z, S+ h' e
double left[4][4],right[4][4];5 p, r3 L2 E$ n" V; B5 k
4 I5 h1 W0 G% a1 [2 T {! E7 `
Project_Matrix_Copy(left_mtx,left);
2 x4 V5 v6 v5 h, d e9 y Project_Matrix_Copy(right_mtx,right);
- q( j! R |' e/ x/ F for(i=0;i<4;i++)
% a ~, s5 R3 a4 _# Y7 v for(j=0;j<4;j++)
( s% C* W& b3 e; g B$ c7 v {6 \" ]/ o) J/ d f
get_mtx[i][j]=0.0;4 f) V7 K2 r6 o
for(k=0;k<4;k++)
, u$ r+ Q9 E# |# L8 ] get_mtx[i][j]+=left[i][k]*right[k][j];
2 M" Z4 v7 } N }% k. H+ M8 f$ h$ r$ Z8 T
}
H4 |) S5 _8 F" Q U! M//转置矩阵
4 ~4 b9 \8 \& ~. Xvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
: Z0 b) T2 ^- a3 v5 Z& Q) j{1 N+ z' i0 p! C
int i,j;. U$ y+ t3 r0 h9 U+ S
for(i=0;i<4;i++): Z* o* n+ a: {' b4 x" u% L: F
{
4 }# O2 \ f/ w for(j=0;j<4;j++)! q: c* E! h6 t* ^
{
' a" m9 e4 @" l7 u6 @2 [8 r3 ~7 z* w transpose_mtx[i][j]=mtx[j][i];0 J. B: P& @! Q1 b" G* J N2 a
}/ [+ L/ Y6 k9 j, c5 s/ x
}
# G5 ~ ~9 h# S8 s( l. \}
: d0 ]. X) F& [. |6 a+ Z//从11元组获取变换矩阵/ Q, r3 r, p5 g$ @, c" W& u5 K
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])- y3 j8 @, t: s% L" u+ `
{
# H) {! M3 w X' W3 J) E7 ~, u2 v0 s
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);
: [6 [% ` ~2 A8 K int i,j;
! B y" R7 m. c( B$ U8 }& T for(i=0;i<4;i++)$ T Q2 y4 k9 a7 p# L* @
for(j=0;j<4;j++)( [3 A) H$ T& i
if(i==j)
7 C f' c1 ?+ N5 l+ v1 Z pos[i][j]=1.0;# r2 L0 X: R/ }0 s. n& e
else& k. d$ N$ N) Y# v" M I: [
pos[i][j]=0.0;7 ~# K1 K( [8 m3 ?$ z7 ]
pos[3][0]+=translation[0];
* p/ g' j% n! @7 Q B, O' x0 ? pos[3][1]+=translation[1];" m7 d1 n4 W2 U% o6 Y, j. Q7 o
pos[3][2]+=translation[2];
# \/ z1 J8 K# v! }( _6 c, e) W}
. v! E; ^) _( m8 ?5 a2 Y//向量缩放. |. k5 M8 r) \8 K! K }- T
void Project_Vector_Scale(double a[3],double scale,double b[3])
Y' t* C( p j1 W4 A: a6 \0 S% d$ I{
1 H a. u% U' ?3 O! A5 T3 s1 ] b[0]=a[0]*scale;
2 ^' Z" [& D" K& C5 {5 f b[1]=a[1]*scale;1 |) B( z0 j6 F" d7 ]5 P
b[2]=a[2]*scale;/ y# Y7 s7 J4 e
}7 S. A. w' R7 s
6 Z! S* [0 |+ e, t& l |
|