|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
, x( x) G$ Y' }5 k$ C: z: B. }7 a+ D+ y$ c/ K# f0 q' v* ^
- X7 h, G; }# \( e) A) q( }
#include <math.h>
% @8 q x: o& i1 J//矩阵复制' D! z8 u2 }- S; g9 R
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])+ K) r4 m1 B& Q; J( H4 ]8 Q
{3 c" M* Y8 K7 {! O) K& y! K
int i,j;. }9 Z2 N+ P; c; I1 u- P! S
9 V7 @: A) B5 y! m for(i=0;i<4;i++)
2 h' c7 y( F/ ]8 u# Q" q for(j=0;j<4;j++). d" l# c2 D) J- a
to_mtx[i][j]=from_mtx[i][j];
$ C9 f0 {; m% U( x}4 G7 f7 X# f# b4 [- t2 N
//矩阵初始化
x" H8 o: \1 B/ O! ]+ }" H& Ovoid Project_Matrix_Identity(double mtx[4][4])6 c+ L" y' q8 @2 t' b
{
: X2 J" w( `& V* N9 K# f6 v$ M int i,j;; r! `2 Z+ _5 [' W1 d4 G
& W" R/ D. V$ a for(i=0;i<4;i++)
; r, U* k9 |/ {" z for(j=0;j<4;j++)' O; M# I% Z; R' f1 ?+ h& q) |
if(i==j)2 s; m" | @, l3 {
mtx[i][j]=1.0;; d* V; u- ^) r; \1 O& z
else7 `) @# s. d" c1 f) ?
mtx[i][j]=0.0;3 k" o/ l" M. _; f. C" v
}5 F2 \# k, q6 [3 g7 C) ^7 L6 _
//矩阵相乘
' @) i$ H" K$ K2 U! y4 }void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
7 D+ W; h8 @5 o( k{( G0 [, k/ k7 H
6 O0 L! h0 b' @: k4 s' J, \
int i,j,k;
. _& C. o5 j, u8 o& V double left[4][4],right[4][4];' F! |8 D v4 N
7 B" C- J0 Z. P) u1 c+ D ^ Project_Matrix_Copy(left_mtx,left);
! y0 u# R/ S& @: _ Project_Matrix_Copy(right_mtx,right);
% v6 p" Z6 K& p" X% W' ], f. b for(i=0;i<4;i++)( p& y& n- f( T( z* y
for(j=0;j<4;j++)
) u" i, z. B7 e: n( y: J0 m. G; e {* u( v# X+ }+ A; |/ {
get_mtx[i][j]=0.0;0 c, y/ V) b+ i7 E( z ^
for(k=0;k<4;k++)7 V( J1 {3 B& u, i5 `; x
get_mtx[i][j]+=left[i][k]*right[k][j];
' Z" A" n4 w) ]9 m* d, [& I" M% ` }2 M/ b2 |, f% h! E
}
- [) p% p" S( R3 {9 C" N//转置矩阵: z2 Q |/ r/ B3 V
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])$ @ x0 r) O! a& r7 ^( g; |& S
{
2 q, x1 o% |+ L7 b( }2 A z2 ? int i,j;
5 L- s8 I q9 ?3 \ for(i=0;i<4;i++)
u: Z& z5 z+ p& I {
: O" |4 Z: W2 w; i! L2 ?8 b: M for(j=0;j<4;j++)
# r( e& r4 c- `. ?7 N' \ {' @$ I' m- [! K( f% w5 ^
transpose_mtx[i][j]=mtx[j][i];# v+ @* l) Y8 m$ L' k- m( z
}
; V4 [: B# O1 {: W8 F1 u }6 b/ s; }5 a8 `3 e: M9 M+ o
}
# l) L, }( a- M1 G3 T//从11元组获取变换矩阵, E/ d% l" N4 E9 ^) K* B
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4]); K& ]2 J0 t9 ?- U9 `0 h. X$ g
{; O4 ?7 z8 N6 M5 _- R, x, Y* @
8 ]* @ V. d( B* s
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);; n7 u- x" J& Y Q2 h6 L) S! A
int i,j;" F% N' w0 Q( L
for(i=0;i<4;i++)
C2 U% I9 N. [# j- j for(j=0;j<4;j++)
2 s5 q' T4 | _# F1 B& c if(i==j)% ^+ B4 S$ g" z/ Q4 ~
pos[i][j]=1.0;
2 c- e- O6 `$ I1 N* i3 s- m; H2 k else
3 z: C8 o8 `- h& ?& d pos[i][j]=0.0;
3 O6 w, y j7 z) V+ R' ` pos[3][0]+=translation[0];
/ P" ?) G1 ]0 L2 n# p- T8 } pos[3][1]+=translation[1];
+ t" g: o7 X( P7 T. N pos[3][2]+=translation[2];
, m: G2 i1 y! \2 h1 o% H- q}
3 \- F0 ?6 q* v, i; p% S, d9 \//向量缩放
! z+ ^0 B* @6 d {* d3 `5 yvoid Project_Vector_Scale(double a[3],double scale,double b[3])9 S: Z# K, }0 A
{& J' s, [# X( _
b[0]=a[0]*scale;
m0 `, o- d; s2 t7 k b[1]=a[1]*scale;0 |7 ~6 N' I) M) S
b[2]=a[2]*scale;, L- q" o8 q2 X% ?6 j( X& w' x* @
}. B3 g- v/ l% o6 L$ Q8 A9 T
q+ ^2 ]+ k% `* c L" w1 L
|
|