|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
5 A" Q; D: P3 f& t$ D( \+ W$ P, x* X) F: p% l
: D! K1 W2 E* m" s4 J#include <math.h> 2 k5 q9 z) i0 @) ~; T: M4 O
//矩阵复制& H' P# l3 l1 L3 h" W. |
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])5 e! U5 { P- |) ^# i
{3 M# O* }; V; w. S: B
int i,j;
: J5 x; v, q5 B$ B$ U
) E4 b0 j4 d. Y% \/ E) G& K) J for(i=0;i<4;i++)
0 Q% c+ j9 t/ t Z" N for(j=0;j<4;j++); |: X! c/ E* P8 a. H
to_mtx[i][j]=from_mtx[i][j];0 a q" L) x$ P# f' ~- M
}6 z/ Q) V( N1 l. _0 Z( g6 {
//矩阵初始化' F4 J, P9 C" ^) J; L9 R5 o5 z
void Project_Matrix_Identity(double mtx[4][4])
# ]8 \7 R g0 ]6 B7 `{" {9 f7 `( _3 B7 Z6 f# R$ ^" W
int i,j;
# d* |& U7 C6 R0 i 1 q4 F/ {' M; H5 F: i: w! H$ l4 u
for(i=0;i<4;i++): e* m9 j m1 m1 Y! `
for(j=0;j<4;j++)% G+ `4 w! q7 p4 b/ ?- M5 c
if(i==j)
# E3 F8 S9 i+ j) _ mtx[i][j]=1.0;
* V3 Q6 }2 I4 E0 ^0 H2 F else, J2 T! U. P( Y+ I$ ]. n7 u7 y
mtx[i][j]=0.0;8 v1 h% w7 r- T, t0 t1 @
}
- E5 e$ v! l& ?5 T//矩阵相乘6 [# h. A) i2 ~+ ?
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])4 ?6 D) F0 t( J
{! S; ?9 @7 M. G- q `9 r
% I4 B5 A$ z7 T- G4 a/ k5 t
int i,j,k;
+ J! n) C+ r, G+ k7 A0 w) N' D, Z double left[4][4],right[4][4];
$ N+ x, G( |+ \0 a; e5 W
/ l' _1 \- J- F* J7 ^ Project_Matrix_Copy(left_mtx,left);
8 G9 a. ^/ Z3 |& ~ Project_Matrix_Copy(right_mtx,right);; M2 {6 ]8 O) \ p
for(i=0;i<4;i++)! V( ]4 c, F, f7 F: e6 w. [8 U0 u0 F
for(j=0;j<4;j++)
# O" \! E( m& w. F( j% T d {" l1 p2 ?8 k6 J
get_mtx[i][j]=0.0;# u, E, v- g5 N
for(k=0;k<4;k++)) B! c6 l# ]6 L% r# @- i
get_mtx[i][j]+=left[i][k]*right[k][j];
4 j4 r$ J- t9 W4 J9 v: F }
5 x9 w4 K( j* b* o}
( x& T# C/ d/ z* q( f( X% i2 s/ }//转置矩阵
! K" F8 w I/ mvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
2 Z# B! F# n) p% K% |{1 T6 W1 _8 G( _" Z% ^, Z
int i,j;
2 p0 T, o# E- y/ Z' s! o for(i=0;i<4;i++)
( L3 U4 ~4 N. j* r1 l {
3 z4 \0 r$ Q( D b0 v, g+ m for(j=0;j<4;j++)3 m3 A- n) o* U$ l
{/ \, p8 T( q" G4 ?4 ]
transpose_mtx[i][j]=mtx[j][i];
8 L, I" {3 V$ p- p% h" q5 R7 \ }
) H! Z& Y, [! K: ^/ p }. Z/ T, p. J8 I, h/ `0 ^& G. y+ c
}0 @# F+ v& \+ N# m3 Y& c i
//从11元组获取变换矩阵% @8 o7 G5 D6 ?( h( N$ e d
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])4 \$ k ]& ~' K! p5 [
{
/ m7 R7 y- B- d
0 r2 C; o$ B! Q //Project_Matrix_Get_Rotation(rotation,point,angle,pos);: w+ I& }! y9 U- ], |: r7 }( s' l
int i,j;
% T4 q0 F2 j0 V for(i=0;i<4;i++)$ D% O* a' G! X: B
for(j=0;j<4;j++); S' e3 Q v6 L+ D$ Y) o; L
if(i==j)
) J" p, Q- ^' b3 R2 `" ]! q pos[i][j]=1.0;
) Q" o. H" Z$ h2 Q else/ t5 q- s# \9 V1 d! p% B. Q+ Z
pos[i][j]=0.0;& U2 p8 b1 X5 V& c
pos[3][0]+=translation[0];
; Z& `9 O5 V; I1 u pos[3][1]+=translation[1];" g. `* C$ F2 E' {. Z$ f
pos[3][2]+=translation[2];3 p) i9 p* K6 N: g* J- }/ E
}5 F1 k- X. w# i
//向量缩放
( V @, C0 y( X; M* \ Rvoid Project_Vector_Scale(double a[3],double scale,double b[3]); g1 n( h, j4 ~0 Q9 U; I
{
o8 t7 @( U* E$ k% s4 n x6 y* e b[0]=a[0]*scale;
6 e$ k5 r$ m! N6 w, @2 F; u0 a. C b[1]=a[1]*scale;
+ w) V& F& u6 S* e; q* B/ e b[2]=a[2]*scale;1 I# m9 |) ~2 Q& Z9 B" W
}, l8 T7 `3 Y" [) B' p! U
$ ]# S4 q3 E! N6 w+ B$ S# X/ h6 }
|
|