|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% N4 y6 t W& n3 ?5 _8 J# v4 K: H3 Q) d; ]. I& a& `7 A( Z* \
1 P0 f/ E& ^' A1 C#include <math.h>
2 q% k' v1 D9 v$ W//矩阵复制
5 A6 g7 O: R% [% l3 J% N* `/ ivoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])) r; T0 t$ T- s4 n2 T
{5 c% Z4 T, M. G) i+ W+ r
int i,j;2 m( O# n$ e) D, q7 Q
+ Y) L9 P/ F9 X5 P" o7 k' Z
for(i=0;i<4;i++)7 t# H, \ [/ _. f3 ~9 y& r5 j6 Z0 G
for(j=0;j<4;j++)
6 M* f* Y% {! x, m' P to_mtx[i][j]=from_mtx[i][j];' q" Q6 ]( g; s- ^* P6 y( n1 x
}7 w' a Z9 f7 b* [
//矩阵初始化
. q8 g" [/ n6 E1 W1 Nvoid Project_Matrix_Identity(double mtx[4][4])
+ _# n. j4 \+ V- }' Q( m, r5 M{ T3 P I8 @' @7 ~! O
int i,j;7 h! S' c1 Z8 A. `8 K3 p
% d9 l- [3 z5 a for(i=0;i<4;i++)
: B4 m; Q9 m) @, p' r( t5 R for(j=0;j<4;j++)
4 N2 u& T! }6 v& ` if(i==j)4 Y' h i1 M" K! V( h
mtx[i][j]=1.0;
8 x K' M7 f& `( l else
# y2 Y: h1 s2 ~1 z% D% d! _4 q mtx[i][j]=0.0;/ W5 z) H3 u7 a# A
}! T; [8 f: i. h" F5 E% I
//矩阵相乘
6 u$ B. O3 _& x- W4 [void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])9 J5 k+ {3 n- R# s( B- x$ h0 l
{' J8 S& f% p1 q
# d# [- z4 V9 I( v" v! P3 p int i,j,k;
" }) c8 K. T e3 X" u double left[4][4],right[4][4];
9 m. l( \' Y& z( J- c% L. D# p6 R9 f7 K3 x
Project_Matrix_Copy(left_mtx,left);% ~, P/ }5 b5 ]% b% U
Project_Matrix_Copy(right_mtx,right);+ W& I! T3 L5 y4 b! `
for(i=0;i<4;i++)5 m* M# E' H/ O6 z" l
for(j=0;j<4;j++)
+ O1 J, j& E( g# i3 j. ^ {
2 B; m+ z- l4 m3 A- P, p, z) J9 K get_mtx[i][j]=0.0;9 U: h4 T# G# w- B9 \1 V! i
for(k=0;k<4;k++)
7 [, \& _5 P5 f get_mtx[i][j]+=left[i][k]*right[k][j];5 N! @1 Z. i- o
}; z& N& b, i8 N3 a' {+ M6 a' O
}, f: `/ K% ~$ S1 P# P- Y
//转置矩阵; H7 W* _2 m7 Q% |: @, }
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
% P7 q0 X: E9 r( A! [8 u2 S' U{
1 f. c! K! [; {6 f3 \3 C int i,j;4 k# h/ L+ g1 n# y
for(i=0;i<4;i++)
, h1 Q7 n2 U7 {9 a) e% g4 r {
$ U; J" T: U: z' l( L/ d2 [ for(j=0;j<4;j++)
' W( X/ T& \ p8 H9 T- I9 y {) r9 k1 W$ `$ d/ g
transpose_mtx[i][j]=mtx[j][i];' @; b1 Y4 {# C& _# b8 ]: D& Z
}6 B- |2 |: b1 R. a4 m( `
}) L$ J# M& \+ b
}7 a* K* [8 X: y0 Z- M! n- j, L
//从11元组获取变换矩阵3 K5 z5 Q) h4 t9 U& p. D
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
% n4 j' a- I% C, d{) A0 a, T0 f& }1 F
$ e9 T. N/ k2 s$ ]6 |' @/ L {
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);9 v+ Y x; k( ~+ u- E( h& C
int i,j;+ B! s; e1 h, ~) [9 s
for(i=0;i<4;i++)/ h3 K4 p4 v! P( v' o4 i
for(j=0;j<4;j++)
: C: z. s, k# ?) X/ v if(i==j)
- `. k" i& W: I d; W" y pos[i][j]=1.0;
# r6 v3 r9 Z% P" R else: L! n" c s0 c5 W+ Q7 d
pos[i][j]=0.0;+ \9 P2 |4 c4 V
pos[3][0]+=translation[0];. n; L. x) N7 H% v1 J E4 l
pos[3][1]+=translation[1];
- r: A, w" G) P1 {6 J) Y" w pos[3][2]+=translation[2];
- {6 C3 `, h% ?0 l+ _( w5 s}4 D) G C | D+ R7 \8 {7 M
//向量缩放
2 g7 f. A- \6 J, n3 t2 ~8 w4 Bvoid Project_Vector_Scale(double a[3],double scale,double b[3])
5 e# c0 Y# e2 O0 N. k6 a1 ~{
) m- O1 p" k, M5 x4 E b[0]=a[0]*scale;
0 z- D, f5 g* E) @. Q8 h' } b[1]=a[1]*scale;
# D4 y# B/ Q6 n; d4 m' x. Y* A4 y b[2]=a[2]*scale;
" F. w: E/ h: |. k5 ~ w/ b: E}
- K# D" ^( i9 e- `6 @
- t$ k3 v& `, e: c |
|