|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
8 h! Y; W" J# |. j3 g2 j
; y4 _) \) S$ D- e8 @, T6 K# E$ W, E! r- r
#include <math.h> 9 n; |8 x, Q% y' Q7 m- p
//矩阵复制$ I3 t& m7 s9 M7 r; L
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])/ h$ M. R; a* s& d# p9 p
{ J6 b7 [+ r3 K; j
int i,j;7 i7 ?# L4 O# }' _ o
! L) U. M( Z {" N
for(i=0;i<4;i++)
8 i% s7 s) q4 A for(j=0;j<4;j++)
$ m/ ^6 `* {8 E5 B" |4 e# H$ b to_mtx[i][j]=from_mtx[i][j];
) p' [, v# ~6 q% _6 V}
9 ], |7 E: D8 h$ [ |" j6 X//矩阵初始化2 P3 e$ ^- w ]6 L
void Project_Matrix_Identity(double mtx[4][4]), H( i0 I" |6 h6 U& I
{ b, _9 L9 `, G g/ {
int i,j;3 P9 z: ~* |) `! F$ c# Q& g% U& m+ N2 m
0 M; [4 }' u, j, y! t
for(i=0;i<4;i++)0 F6 v+ @ F5 y' c% Y: s
for(j=0;j<4;j++)% ?8 r, B. U' H* j0 b. G
if(i==j)
+ @/ m* T& W- c mtx[i][j]=1.0;
, c7 u+ e+ L( _# i- s. c else
5 g! t' c, x+ G5 @7 ?' B mtx[i][j]=0.0;0 _$ R; H: `2 X7 {0 h; h) p
}& ~: `; X6 v% ?" K& n
//矩阵相乘6 S" ?- `0 n) L0 X6 p D
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])! f6 H: ?. T" U' J* }* U6 d
{+ _6 v* w: U8 B" T. j% \6 z2 C
7 R3 L5 `1 d- l u9 D int i,j,k;
. m1 f. v$ a( H) F$ H9 l0 M double left[4][4],right[4][4];. A$ W, l, o( M, ^. l- q- t
/ R O+ e) t9 i Project_Matrix_Copy(left_mtx,left);& k4 C8 ~& X, F# u
Project_Matrix_Copy(right_mtx,right);
% A" ]! G) w: X' Y. } for(i=0;i<4;i++)
. w3 C" T2 E. B5 [* N7 C+ M for(j=0;j<4;j++)
3 U, j0 L6 R" C j7 R5 r {
: G' X; G; ?2 v' }5 v) @ get_mtx[i][j]=0.0;$ J1 x- b; E' Y
for(k=0;k<4;k++)! w4 O5 D+ J% b- Y: Q
get_mtx[i][j]+=left[i][k]*right[k][j];3 C4 K) W8 U: }& t F
}3 [" F* n# L, M" r
}
. L+ i4 p9 ~( i5 ~3 w7 m//转置矩阵, i8 V7 F F! T% i" |4 o5 ^
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
+ D; h6 b$ C2 P2 i( y, C{
! Z$ L3 D5 d( | int i,j;7 M- x. h6 Y# Q3 J4 |# Q
for(i=0;i<4;i++)
; A$ E) v1 n8 r, \, h {% H( r4 a* Y: n( O
for(j=0;j<4;j++)
9 \+ g- q1 c2 L9 `' l" | {
& d/ |: I5 ]4 Y x) |) p. k9 F6 ^" i transpose_mtx[i][j]=mtx[j][i];
0 M% o7 }+ O3 t1 R* f; k5 ]. J9 G }2 w7 i. m0 G- n1 {
}
2 w0 `" @! N( }0 I0 F}
* [' f- H9 h$ p9 S' T5 |' A$ i; M//从11元组获取变换矩阵9 k, s" i, Q8 y# \. Z
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
/ d6 y P& p H U }! l0 j{
/ q& o: g' f' @) Z) _6 {
+ k4 V1 M0 Q0 U* l+ j //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
+ T0 f1 v* J' r- W: d, a L+ Y int i,j;
, c* a' s7 z7 L/ F for(i=0;i<4;i++). S1 j! p- i( C( C% ~/ j* T
for(j=0;j<4;j++)
+ x$ o; y6 m: O/ V, l9 {; l3 r if(i==j)
, ^" ?' G5 t" L! D, E K9 m pos[i][j]=1.0;
) ~4 {6 ~- G9 u" l" x8 ~ else
/ A3 h' U C5 f! W7 D6 q5 c; l pos[i][j]=0.0;9 R2 z; l( d9 E
pos[3][0]+=translation[0];) k3 [4 W6 x" \& @8 k3 H6 N
pos[3][1]+=translation[1];* S n9 w$ B5 |
pos[3][2]+=translation[2];
. o$ W) a# e5 G6 @8 B$ J# b C}
( D! r$ i; ^0 W* g$ T6 N4 {: e5 F//向量缩放 C: Z$ B0 l; R: y3 \* n
void Project_Vector_Scale(double a[3],double scale,double b[3])) U: T o( ^0 ]. S( Z
{9 T% s2 B) u" N4 j' @5 M( n! j
b[0]=a[0]*scale;
: y, T9 p4 c: m0 A0 P b[1]=a[1]*scale;
2 R: F! W d# a* }$ k6 o b[2]=a[2]*scale;
0 p8 x- k) k. @4 x0 n0 X}
5 Z% x3 `( x( v7 ^4 w2 I! A
% q& N; D( ^: D } |
|