|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
# q& f+ E: y' h$ U) L: |4 S0 z
2 [& t5 ^; J/ ?* i) F! f7 z
#include <math.h> 6 z7 M' I- h2 b5 n. N
//矩阵复制8 H; a' [+ A$ U& N& e; Y
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
; a* n# e4 h, u1 f, [, f' u% H& V{1 }* A/ b. [4 x, i0 ?, G0 t! q7 f
int i,j; W& w% _( i$ \/ J" F) U8 c
7 {' ]5 j; R5 L0 s" b$ a/ T
for(i=0;i<4;i++)
, b& V. o8 v$ n1 z for(j=0;j<4;j++)- e8 W5 v% q5 r k" _
to_mtx[i][j]=from_mtx[i][j];
8 n+ U+ E7 h9 V4 ^9 y}
D/ U) U0 [/ J% w4 k' `: u4 f//矩阵初始化
6 V; G. W9 w) l( H9 U' {void Project_Matrix_Identity(double mtx[4][4])
|) g0 T: N3 O9 j- {{3 {/ P0 Z! A7 H! D! i
int i,j;4 Y2 n, K% w) O. u: R) ]
6 B* J1 @, v0 J for(i=0;i<4;i++)
! K6 f) f. h# }+ y1 G1 K- q# o for(j=0;j<4;j++)
% N+ A/ @7 _; T* y4 n6 d7 Y if(i==j)
9 I: o9 c$ [% m mtx[i][j]=1.0;9 D' q* \- i& e2 ^& r, J
else/ x1 S) r. N" N) Z9 H# [
mtx[i][j]=0.0;6 p: f& L, }- g- I4 L
}
5 J- _/ J" H0 _, {: m- ~# o//矩阵相乘
! z$ b. |& x+ F$ Y! zvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])" R( a3 k" _: _- w6 O( N
{( l% R* j1 a$ @$ O, E8 J/ f7 q
: t% T% x: P5 S' E9 n1 Y7 ]
int i,j,k;
+ M- U2 K8 ~$ y1 V double left[4][4],right[4][4];: V. m& x) A+ f$ A g& c
# L3 h7 ^9 Z# ]
Project_Matrix_Copy(left_mtx,left);( W6 {. D, g' {/ t" @$ n2 }
Project_Matrix_Copy(right_mtx,right);: u7 ?7 m) z1 `+ w# p; C
for(i=0;i<4;i++)- s0 ?1 h- V3 m2 h) y
for(j=0;j<4;j++)
) c2 U3 ? @$ r* x# [5 s {8 O4 Y! V5 _ \2 K+ g0 U5 h ?
get_mtx[i][j]=0.0;
/ P* N3 p) p+ V6 y' o6 K8 O( G for(k=0;k<4;k++)* J# i) V; D2 S6 {
get_mtx[i][j]+=left[i][k]*right[k][j];
' E8 ^- ` L# E4 ~$ p4 T }: S3 a2 l0 \6 @$ f( S
}; k$ @1 [& r- Y7 |4 L7 L
//转置矩阵3 ?% {6 P' u2 x0 R* x: q9 [, I
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
( G/ r, ?; f- `2 R8 n$ h+ G9 N! j. j$ S{
7 {( b* T) ]- g7 O* H1 e int i,j;
, s, q) t/ C& C- ^4 S! `' X for(i=0;i<4;i++)
0 }& y) N# f5 _8 n# l5 A& t8 a& n5 } {% ?0 z9 |5 F* f" D% w7 h
for(j=0;j<4;j++)
5 z1 y( a! D& H1 X" e3 w1 { {5 Q. X2 \# U5 x9 }/ I
transpose_mtx[i][j]=mtx[j][i];1 V& V% i. g+ [7 n3 g
}0 {! V/ X" A& N5 i
}
. q/ ] {- D, r; T& }}
/ m4 h8 [" ]$ D//从11元组获取变换矩阵/ p5 `5 B! f2 L, I6 G
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
( @9 A) r6 n5 E- r{
: |# C3 F8 _5 h9 e( Y
) z: u$ c i% [3 F //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
8 j# W! \5 e3 l# G4 Q$ j int i,j;9 w9 i* G+ K3 Y, U, j" f, L+ i
for(i=0;i<4;i++)
! J2 B! W5 O, m2 m: ]0 q for(j=0;j<4;j++)
( n& k. K; `% l4 x if(i==j)
7 t! p/ N) E3 D6 y2 K' _/ v pos[i][j]=1.0;
1 v# Q ?. S1 F$ c! M" X' v8 C, z else
. q& p8 I1 Y8 @- L pos[i][j]=0.0;
]; I8 b1 e# x6 v3 I* R5 d pos[3][0]+=translation[0];
: T2 _. }, i0 d5 {. X/ E8 @5 I) ` pos[3][1]+=translation[1]; b! S% O. h9 o
pos[3][2]+=translation[2];: k3 s1 C- l/ i f
}( ^4 O& K, L5 [
//向量缩放# p2 k7 z% u4 y5 j0 b7 v( t
void Project_Vector_Scale(double a[3],double scale,double b[3])
. n, ]. S- ?% ?7 h{* H! O5 A: [' K/ q* |% f
b[0]=a[0]*scale;9 w% {0 ~8 F- r9 A* A' T
b[1]=a[1]*scale;
( d4 j/ W# h$ H& d b[2]=a[2]*scale;
. Z' e$ x% {! E8 i0 [}
w9 n5 V3 ^0 ]% {9 N3 M+ c: q* t+ ~9 c: B: g( f! P4 h
|
|