|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
0 ?4 K! U f: _7 O' ]0 l: p0 ~
; ?$ a; G; v( E+ S4 I2 T9 P5 h3 w$ x4 M4 d
#include <math.h> 9 z+ }2 h) y* ]& g0 `
//矩阵复制
! J- R; \7 J! k% K* F" z' fvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
& k- z1 }4 z- X8 t, O{
9 q7 `6 w# ~/ P& y) }7 a int i,j;
2 r, p4 e9 R3 J, c9 r% q; }6 t( x; q y. m
for(i=0;i<4;i++)
3 Z' s! u6 y7 I1 p for(j=0;j<4;j++)+ w; g1 S( g- N; @! N5 j
to_mtx[i][j]=from_mtx[i][j];
' b- T0 k- }% Y1 Q0 J}
9 ~- s: U1 @" E//矩阵初始化+ y: W. {/ v: v0 p9 j
void Project_Matrix_Identity(double mtx[4][4])
( _. M9 A3 T& j' m( w- {3 X% R{
2 s" D2 D/ Q' X" {. n; z) y* Z1 S. ~ int i,j;
0 L& \/ p# V7 G6 U" K; X% s0 C
: w/ M" u$ W# r, ~9 T4 f for(i=0;i<4;i++): w- {& n# m* P. B- H
for(j=0;j<4;j++)1 [: Z( \2 C* L$ |4 P. W, k
if(i==j)
; q }7 Y9 b4 }" @$ q# q mtx[i][j]=1.0;# k. U4 P) g' d- ]1 h7 n
else; k8 \: Y0 m5 n# v- o
mtx[i][j]=0.0;
F/ R- H U. i}6 ?. O- ^6 V" q7 X! j
//矩阵相乘8 m* e3 X4 ~+ o0 b
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
$ o1 P( o R2 \- s J{
* M- W$ q: P7 t3 g7 P% Y- J( @$ z0 D' H; S; V0 T+ v2 ?5 V
int i,j,k;
0 e7 z) ]9 S3 ?/ g double left[4][4],right[4][4];! t. i7 @/ a, E2 m
9 o( `+ ?' C O" D6 ~ Project_Matrix_Copy(left_mtx,left);
' t% ?) m8 `& ~) l: [ Project_Matrix_Copy(right_mtx,right);$ D; J. K& }2 |6 y9 N
for(i=0;i<4;i++)0 y9 f) s2 O+ a' t! R
for(j=0;j<4;j++)
: V0 J3 E( s1 w. d4 B: ^- T' k {# L/ p E' H/ }6 Z2 C
get_mtx[i][j]=0.0;9 i9 r' S, k2 T) s' b8 K
for(k=0;k<4;k++)) `5 K. E+ H& s! R' l! G2 U
get_mtx[i][j]+=left[i][k]*right[k][j];
, H; |' I3 ^& o Q5 |7 T: M }' E" Y$ j0 k4 Y" j3 u
}2 y8 Q5 A( v% |$ f
//转置矩阵: c2 R* ^9 i2 g& X8 T/ Y
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
7 Z5 Q1 k& y% ^8 m- V6 _0 a{
% i( n1 I, i) K int i,j;
1 m D% v- ^7 O& _ for(i=0;i<4;i++)
1 g }4 B# u h t& X3 O {% r7 s _. K2 u" o N
for(j=0;j<4;j++)
% b. Y u3 B+ M; c5 `0 p {6 }4 l& Z m7 H4 E' ^$ N
transpose_mtx[i][j]=mtx[j][i];$ {, x( Q7 o3 k: e
}/ k+ w; R; `' v; M
}; d9 @" e: W) S2 R
}
5 a; e0 i5 B( T* C3 q0 h* y//从11元组获取变换矩阵& J+ v$ `. x1 l* K& ?# j2 c. h0 `
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])5 a8 M% s3 ?; }+ L) |* g/ b0 m) q
{
0 e) l1 o2 V' i9 S3 q$ q0 r v$ |- K7 V$ R. y7 a
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);4 t/ P3 T& J# d! `9 @' o9 Z
int i,j;
4 I5 w* K' {. W, H Q for(i=0;i<4;i++)
& \3 l. w: j% K W/ p for(j=0;j<4;j++)
9 G$ u* V4 c" \5 m8 ?( d+ R. T if(i==j)
' a( W9 ]) a5 l pos[i][j]=1.0;
# ^; x: J \: {8 `! w else. t o8 i' j6 L
pos[i][j]=0.0;
1 t4 w' q- g0 Q- @! b6 | pos[3][0]+=translation[0];, |0 S7 H+ r1 S8 T }* Z
pos[3][1]+=translation[1];
4 P# z: N# o( ~9 o0 L pos[3][2]+=translation[2];8 d+ d/ I1 D# _' N) c i# T
}6 `0 N) g5 f4 k3 {1 ]- Q) A
//向量缩放3 R5 Z2 G) \9 |, J* d. G2 F
void Project_Vector_Scale(double a[3],double scale,double b[3])
0 [) Q4 a! w. E. f& ^9 l{& |) I3 x. A2 `( L, X- x5 x
b[0]=a[0]*scale;6 L8 y8 C) n. D* g3 R" z
b[1]=a[1]*scale;
- m9 k# n& r+ X: F+ A9 A% q b[2]=a[2]*scale;, w' Y+ f. S- [4 D
}
+ C+ s/ P" h( r6 a! {2 D/ E& q9 U) A7 j% B3 g
|
|