|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
- R, A0 X: x. n
" F$ S! C) o9 j) ?
. G* c. ]# v# b1 T3 z) p9 S: \#include <math.h> % }) D# X7 m+ j% v; N# | J" ^
//矩阵复制
X* V( E0 c) @- T1 ]; D# Y0 c. v# J4 gvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
3 R7 k$ P: ^+ z8 l9 u1 O, x{
' o" {# B' X7 E* f4 } o0 I( C int i,j;
" \' X9 V$ \8 k6 ^8 v; e2 |" ]1 ^9 @# j7 a; S/ {
for(i=0;i<4;i++)! x, l& @0 H, a& B% K1 }9 y1 g
for(j=0;j<4;j++)! z9 U4 ]- p' g# ?
to_mtx[i][j]=from_mtx[i][j];
; D7 W: S; ?1 D* x: G! x* r2 K# ]4 e}
" p: k* [0 U6 B5 L, L//矩阵初始化' C/ c' Q% o$ M
void Project_Matrix_Identity(double mtx[4][4])+ D' s- y/ _0 H3 u$ G% U; e# K3 \
{
: ^* p I% f) G2 m int i,j;" x) H5 n! M, A& q3 H$ O
0 Q' s9 r1 D" N: c8 R' ? for(i=0;i<4;i++)/ t' @6 N9 o& U4 V
for(j=0;j<4;j++)) |% M5 P6 G, Q% d+ Q/ B
if(i==j)
: F6 L$ ^# `0 t% a0 D) u! n9 x1 A mtx[i][j]=1.0;1 L% E/ l' `1 I
else1 r9 W& Q" i+ A6 U! q* U
mtx[i][j]=0.0;
5 b! b9 {, _( W0 I( n+ E8 z( m}" `) G/ C# D, d+ ~- r: F0 l
//矩阵相乘
; b, `4 R& W' P8 d" }* G- d$ gvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
( n9 H' x9 Q8 F{7 S- K) @+ G, O2 [4 U) V/ t2 b
V5 @$ T+ k& [5 G% P. j
int i,j,k;
: Y+ P& H* Y% E a6 e# `. u3 _ double left[4][4],right[4][4];
3 X6 `0 _; G: l
) q9 `' H. C" t8 ~% ~3 ` Project_Matrix_Copy(left_mtx,left);3 Y* A( Y0 z q+ S6 Y. E, e
Project_Matrix_Copy(right_mtx,right);: M4 V- E3 p& h9 H4 u# T4 U
for(i=0;i<4;i++)+ ~* W, E7 a; S: u. S" ^' q6 z F; c
for(j=0;j<4;j++)/ W8 }! X9 |& t; F, M
{
1 W- H, i- _! ]) _+ ` get_mtx[i][j]=0.0;( L- I, H7 ~2 x
for(k=0;k<4;k++)
+ L; b) h- _' h: x/ b# A& s get_mtx[i][j]+=left[i][k]*right[k][j];
. ]4 t" z8 o$ K1 y3 M }
( b" m4 F; H! ?) X: t) D( h y}/ O( d. A) Z1 p3 e% }
//转置矩阵
0 H, I' ~. S/ Q4 Ovoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])7 `$ Z2 R$ _: k& ^' U! S
{
$ \% g8 }4 o, [0 Z- } int i,j;5 H+ U( y5 w: H0 x; n
for(i=0;i<4;i++)6 R' y+ Q4 p$ l5 M; I# U
{
2 K/ u/ @4 ]! m for(j=0;j<4;j++)
2 Z3 a- x3 g( e) h: D8 r {7 n$ O1 T# [/ z
transpose_mtx[i][j]=mtx[j][i];
% J7 F/ a2 n9 X g }2 _' L; B9 g1 M9 ~
}- E& Y* _8 |, U% f
}
- e- t7 C5 H, w9 y4 J//从11元组获取变换矩阵
. D, ]! p5 z! Y) P Svoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])1 w& ~+ a- _$ L ^5 i
{
% Y' V! b S5 h. A* a& Y$ D$ a+ b: m8 f
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);0 O3 [5 \( B& N, C2 r
int i,j;! w* i) |' q& y
for(i=0;i<4;i++)7 ^/ B8 i. [2 R/ ~9 L( l: i
for(j=0;j<4;j++)% G6 o; ^8 L* V7 |+ O
if(i==j)
2 _% r/ |' J, d; i" t+ F9 b pos[i][j]=1.0;% G. B l2 j$ y/ i* J
else
! ?8 [8 b6 _1 G pos[i][j]=0.0;
0 j$ L- ?0 T* \9 ? pos[3][0]+=translation[0];7 G9 v2 A1 V5 ]
pos[3][1]+=translation[1];( m9 ?# {7 D3 q) X( f
pos[3][2]+=translation[2];: A/ K' Z. l0 [- N) z5 A1 ~
}
% J4 I& Y, \& E- q3 H" j//向量缩放( R) u. J* e6 n, D
void Project_Vector_Scale(double a[3],double scale,double b[3]). u x/ f1 I# v0 T3 p3 F& U, N6 N
{
! R" C! j# g6 e1 W b[0]=a[0]*scale;# q. W j( q6 J) t
b[1]=a[1]*scale;
2 H; L% ~! C5 u b[2]=a[2]*scale;7 c7 }$ N3 Q9 f& H( F. E3 |' x6 R
}
+ |4 d# P4 ]1 a6 h1 T( d9 }1 Q1 O/ x( i3 C7 T+ R" I
|
|