|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
1 c* y: i, e9 a x0 ~5 P' A0 w7 l
% g6 }8 M7 D# k1 q- p% |$ E, H1 o- h# D0 X W% i) I
#include <math.h> : H5 p6 ~( P" _
//矩阵复制
8 Q- W% s( j9 L1 Q, Fvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
* n% ~6 v9 ~( x" L. t4 y2 `{
0 e1 h1 O8 W" I h2 y int i,j;
3 Q) V+ n' L+ ], Z' ~
% y7 M: i& O6 x for(i=0;i<4;i++)
0 P. T* J. B+ x' {) p f! @% r for(j=0;j<4;j++) q$ k% O8 C) j- D3 B( E5 O
to_mtx[i][j]=from_mtx[i][j];1 g( I* l5 d: w4 Y. e# ^/ X; ?
}0 ?" B4 ]* A3 X6 p$ A/ B
//矩阵初始化. Y2 t* R: t# N
void Project_Matrix_Identity(double mtx[4][4])+ _5 }$ P% N% N6 [$ d6 S
{
! p, [( J! B+ R) ~ i, [ int i,j;
0 Z! O8 u1 p3 p& m6 Q$ g7 w) j* O# p ; e8 p% B. |. B$ a# P( |
for(i=0;i<4;i++)3 c6 |4 P$ x. `) c3 l, p4 D
for(j=0;j<4;j++)
* g5 Z. |/ G8 u# l& q% C7 Y$ @) r0 q8 w if(i==j)* J& I4 ?0 h( [" J' R5 n
mtx[i][j]=1.0;3 S2 N$ I0 Z' _% M5 z D
else
2 l3 B7 q* }. @4 ^" y$ S3 `7 Q mtx[i][j]=0.0;% | E4 g6 |/ E' ]" j. p
}% s) P& g- u9 o" ]( D, j
//矩阵相乘$ \! T' `5 ?$ I# M7 d) \% N2 f
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])9 {2 E9 u- u4 V8 f5 d) r
{4 _4 {' E; \+ @9 `
* V" {3 C% \! S) v& d# l+ g2 r
int i,j,k;4 C. e! G7 J& l' B8 t" d
double left[4][4],right[4][4];
% M9 @0 I6 c* u; v. i @. \8 U
: z' ?9 Q6 _. S* K Project_Matrix_Copy(left_mtx,left);
0 Q, T8 r. h: ]' b A: A% H# c( | Project_Matrix_Copy(right_mtx,right);
' ]1 H1 i4 L# g: m for(i=0;i<4;i++)$ g! \0 i; W; A a. k0 y2 E
for(j=0;j<4;j++)' i& I" V! l! e V. Z9 L5 b% M
{) n F! F/ t: ] L4 U. Y
get_mtx[i][j]=0.0;# R8 ?$ _* E, `. u; |+ v
for(k=0;k<4;k++)
: Q4 Q4 u9 ^% C get_mtx[i][j]+=left[i][k]*right[k][j];
- P6 W3 g8 t; U! s8 r }
2 ?' L, x; X( ?$ d! B! \( o}
+ q8 m [4 f3 v u4 _& c) p0 I//转置矩阵3 f1 |, o; [) u6 c. \8 w0 n0 |
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
* a- ?/ x' _5 o7 X2 S- d2 H{9 I# i( w# ]8 l' p
int i,j;
3 p# E$ ~4 t9 H2 v for(i=0;i<4;i++) e' Q3 u9 q. V% C* w' Z- J
{) W9 O9 f7 R7 k: u% [9 J* p; D4 @& L6 ^
for(j=0;j<4;j++)
# F, J, z+ X7 `, b4 B4 I {
' G( S* X" g* e7 k transpose_mtx[i][j]=mtx[j][i];
# q: S) A7 X. P" u5 T& ^4 L* X9 I }/ C& ]* N8 R* E' X
}& e H, N3 J6 q- `6 g: z
}7 B) J: h5 t* U( U" L8 a
//从11元组获取变换矩阵& p8 e5 z, n* y$ a7 L
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])& e2 x8 e+ |, z* |9 }1 }% R- ^
{
/ k5 f; a, M: P. B: J0 M4 R( i
' W+ y' I$ Q! c //Project_Matrix_Get_Rotation(rotation,point,angle,pos);* E& S' k: n# O7 h
int i,j;( g% C; n# v4 N1 r
for(i=0;i<4;i++)
6 u# ^" u1 H, y/ | for(j=0;j<4;j++), U2 G6 u. D1 g; k8 G
if(i==j)% @+ h6 [6 w* q- Y
pos[i][j]=1.0;
& C$ o6 I. W) [9 }! |1 R else
+ Y s( d$ p! | ]2 d* W9 q. G pos[i][j]=0.0;
2 ^9 ]: q& o# O" Z# a pos[3][0]+=translation[0];
* }% y/ d& G8 z3 [ pos[3][1]+=translation[1];
( T+ V; \) u1 Z* s5 V pos[3][2]+=translation[2];
6 Y% Q! H; V! D# U+ Z1 U' x}
* q! ?) ]! z3 G; z$ l9 g8 i//向量缩放! Y+ u( j4 A1 z6 z X7 L
void Project_Vector_Scale(double a[3],double scale,double b[3])& e# V' s: E5 j% B0 X) g5 k% k' H4 S
{ {; J- B! F; v3 V; f/ A# A5 P
b[0]=a[0]*scale;; F/ ?( `. U0 Y; K, S0 G6 [
b[1]=a[1]*scale;
% Y, y6 S* }0 c4 _' d3 g8 ^# p b[2]=a[2]*scale;
3 r/ \- K) r A- T}
* Q% z) H' ~" X, p$ o; I% y5 @! e0 P: E K# W# j1 k) x0 |' N% X* U
|
|