|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
1 q2 k6 N# ?# L# x8 x* o; H# K: c7 H& @7 q- i
/ \) n S' G s& H2 D" Q1 H
#include <math.h>
( |% c$ `/ b6 K6 d6 g0 i: Z% e//矩阵复制
- N# q5 o% V) U3 B( L& @% R4 }void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])) j- l! b% X# w; Q
{ ~$ `* T( M* D* `! t- P z
int i,j; M; h3 R! D3 H' z- N1 i+ z
2 v3 o6 H- [/ ^. K- Q
for(i=0;i<4;i++)
- J5 r4 b' b, F8 P9 ? for(j=0;j<4;j++). l4 u( m& `* ^; O) N; |
to_mtx[i][j]=from_mtx[i][j];
- \, h8 h& Z. e- n ^$ z7 p; k: H}/ k1 {9 @. r# U7 B2 k
//矩阵初始化9 T3 B" m! @, O: e y/ d
void Project_Matrix_Identity(double mtx[4][4])# p* O/ K. V; e c1 J
{- N- X: ] J/ x3 ~! h" V
int i,j;
+ K# l7 l! k1 `7 r8 Z, U7 F x3 s! J7 p4 ~0 O4 g
for(i=0;i<4;i++)
+ a( x) n6 R4 B2 U9 P. S4 } for(j=0;j<4;j++); ~+ R% Q7 b9 m1 v8 _8 e3 ~
if(i==j)- Z+ n" X s' C
mtx[i][j]=1.0;
& K) T3 V. H3 [/ J( f8 O else
: ?& \3 e ^! W2 o mtx[i][j]=0.0;4 f A7 ]& A h/ f$ O
}$ r: t0 O1 t4 G) ^
//矩阵相乘2 v. j/ }* w* Q: H2 P9 [& W' N1 U8 N
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])3 X; ?' n: [+ D0 |+ ?6 \. j
{
9 q9 |0 V5 y. w* T' r! t y3 V/ R5 D+ Y4 U
int i,j,k;# F/ F# A" I4 L0 h3 D
double left[4][4],right[4][4];+ \6 l7 A5 i3 k
# v5 m9 \7 k3 @# P Project_Matrix_Copy(left_mtx,left);
6 \$ Y# t# g0 o7 i Project_Matrix_Copy(right_mtx,right);
- g; ~9 M) \" Q3 ?0 K: D8 Y for(i=0;i<4;i++)5 n4 A6 N* a. N7 M& `5 _
for(j=0;j<4;j++) R* G# I" [% y6 F! M$ z
{
# b/ l, `4 k' c. x# i# d8 z8 p get_mtx[i][j]=0.0;
% C3 ]; @; ]$ L- s for(k=0;k<4;k++)
' q0 t% |4 o7 ^9 _9 F get_mtx[i][j]+=left[i][k]*right[k][j];: {' o' j) C+ _& \8 p
}; w' f7 p9 v# S. c/ F( }
}7 [" \( {* f- s' b: t4 x4 Q, l
//转置矩阵, y8 m7 n$ s/ `
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])% F2 A' C( I; d7 c
{
6 o0 P1 q( \) ^8 [( N+ \: t int i,j;
+ Y& [& v j9 Y! N4 ^: [, M) |% U for(i=0;i<4;i++). G& B1 c# C! _3 O
{& E5 ?1 _0 t5 z) @! T4 N
for(j=0;j<4;j++)
d4 Y$ g) |; D% B {
/ M& W5 F* C6 l transpose_mtx[i][j]=mtx[j][i];+ n9 I- e' m" S( s5 D% d
}
( L; b, N$ l i1 h* I0 W }* x+ ]) f2 x: b0 ?
}+ R' U; T$ \) B* H- e! G& U u
//从11元组获取变换矩阵8 j4 R5 J7 H* {( k5 K# j
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])% }6 Z M- n: B3 o
{
0 \7 k2 S- f5 u0 R) E( R3 m$ j9 |" m a# }8 X( j% I, z
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);
+ B9 O) L% Z7 o S1 H int i,j;, x( v3 \1 R, K( ^
for(i=0;i<4;i++)- y* G( }% V/ c' ~3 @
for(j=0;j<4;j++)
4 w8 D! v* `5 w$ K8 l& c$ N if(i==j)
8 f: t7 e9 X2 \) L( p! ^ pos[i][j]=1.0;
* i1 L1 t( ^* j% Q! O else9 i: T# e: N! L
pos[i][j]=0.0;. ]: n+ u' R4 J/ D T
pos[3][0]+=translation[0];
* p* y- m7 |% T- r' V- n0 e5 o pos[3][1]+=translation[1];7 T" l* U2 T9 }3 v) {+ {; h
pos[3][2]+=translation[2];
& O) X5 z: s3 i9 }: v, t}
" l+ I2 F5 w0 \" m$ t5 a/ ]//向量缩放( _' N- v' c$ n' ?4 D- A
void Project_Vector_Scale(double a[3],double scale,double b[3])" r9 ]3 x' B8 b+ `
{% G$ Q5 L+ S. b) i$ M- g. ~' `
b[0]=a[0]*scale;
- h# ^1 A' M; V! p8 ?7 |1 j) x b[1]=a[1]*scale;
* b1 G% P5 d1 `3 ?) a/ T2 c b[2]=a[2]*scale;# z. c, l$ `% `& a3 l1 j1 A
}
4 W- O( u/ k. ^; U
" F, R% N+ I6 V! x* D |
|