|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
& W+ U C' G* x0 o0 z! ?# c8 Q6 K
" d6 u. S3 `6 u/ {6 S4 a
. u6 }/ r& I9 [ w% t: N% d#include <math.h> 5 ]6 r, ?. P$ ]% x
//矩阵复制
; {( w$ @( {' v2 d r+ Evoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])- d% O* H# n' Z' n) w
{. Y% B! K! T* v! ?/ u4 T8 I
int i,j;- Z$ M( t- Y. k$ h& q1 ^" T0 H
+ Q. j: ]* x" v4 L0 V& _+ N' C for(i=0;i<4;i++)6 K' c: z2 t1 b" T0 r
for(j=0;j<4;j++)
+ ]0 S" { A# M4 x* a z to_mtx[i][j]=from_mtx[i][j];) ]3 Y/ l Z6 }5 \! H6 K
}
' c( A2 c2 `; Y. u7 x! P5 O5 ]//矩阵初始化
$ I3 ?) S5 l" X$ w# `+ ]void Project_Matrix_Identity(double mtx[4][4])
2 ?6 [# I) B) R7 [" X{2 X$ \) C# m, ` n$ y# a' X
int i,j;
( u: S; w. m/ z! Z+ K ~* Y
/ F' ^, ]& ] s. X2 I ~ for(i=0;i<4;i++), d- P! A- q: b* J6 F2 I0 I- x
for(j=0;j<4;j++)- Q- u# @' a" N5 S( L0 N1 f
if(i==j)+ T$ U* x0 O% [
mtx[i][j]=1.0;
* E% \( i$ l4 v2 P% |4 ]$ ] else# t6 B0 n9 l+ x5 |- w# o6 H0 s( g
mtx[i][j]=0.0;5 l# m' M; ~6 A
}7 a0 P( o* K1 K- V
//矩阵相乘
5 _8 D) w/ L+ n+ G. kvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4]); b& q; W# \8 A8 `
{% Z5 ]2 e; B' @! S' M
7 I; e2 y/ j( V6 q int i,j,k;
( s. [7 b& I" M& U3 W% n1 g double left[4][4],right[4][4];
8 C& }. y: m0 q- q, C! n6 `% M! @
" U7 M, V9 E. R# {! b0 V1 x9 y- v- s Project_Matrix_Copy(left_mtx,left);6 B! o# D- i, c9 q0 {* {
Project_Matrix_Copy(right_mtx,right);
/ \% x& _) N& @' P& f for(i=0;i<4;i++)# q7 v1 S9 U$ a! S6 F
for(j=0;j<4;j++)
( G7 q- A/ u2 v% Y9 v2 v {
" e( t! Z0 k P+ R get_mtx[i][j]=0.0;& a& \. y* t, Z9 R$ T
for(k=0;k<4;k++)+ q; p# L1 {" p- _# g- v) Z& d
get_mtx[i][j]+=left[i][k]*right[k][j];
1 b3 r/ \: z6 k& e/ U- z/ r }6 O: M, F3 m2 B h' Z
}
8 L$ I: ~( [7 N2 O- M//转置矩阵
% A: z+ R& z* `8 K u! c$ dvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
+ m" X# }: ?# Q0 Y{& M& Q. R7 C* ^
int i,j;6 y5 j7 M( Q. J- U2 O) [7 M
for(i=0;i<4;i++)$ w+ h# O$ x0 m0 ^5 q* H4 J
{( [' N" v1 q8 M7 m0 k# p" x( f+ K
for(j=0;j<4;j++)
2 I3 v+ |% I; h' p {+ J- n/ g$ K1 @, D4 Q0 V* k' Z
transpose_mtx[i][j]=mtx[j][i];
' r( \; O. O, d/ w/ M: Z& K$ n }
U. ~* E! n5 u: s' W* |" T }
1 I1 p2 d/ Z: G, j. P+ S4 n}' H& C+ A9 }# O" z" D
//从11元组获取变换矩阵0 }$ b2 t' B% j# X
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])3 A1 M- a+ x5 ]8 H( M) O
{; L: k7 j; Y0 j' R" o4 m
. z4 V: l) {+ s, f) x/ Z
//Project_Matrix_Get_Rotation(rotation,point,angle,pos);7 c$ S: `& B, ^* i/ C: e
int i,j;
" v0 k# ]0 p, L for(i=0;i<4;i++)) i% w9 F$ P7 E4 T8 l
for(j=0;j<4;j++)
( J/ T5 S0 R2 ]/ w; B* H. V if(i==j)
+ z F9 x" i( i9 K) q1 a K pos[i][j]=1.0;
6 J6 [8 R4 {" {9 K* J1 R else, ^- ]3 F2 X8 p3 a
pos[i][j]=0.0;4 v5 E. [: I" U u% X3 S' t
pos[3][0]+=translation[0];
- j4 Z/ U3 D1 y/ h4 _ pos[3][1]+=translation[1];
. j r4 L' ~$ `/ W pos[3][2]+=translation[2];
y& n4 Q: [' { N, W6 t}
( | v( R2 q' \//向量缩放
) \; a5 V C. L# a& Uvoid Project_Vector_Scale(double a[3],double scale,double b[3])" E9 \; m, O& }6 h& T
{
9 S; n0 f p/ x, {) A b[0]=a[0]*scale;; u C# N. W8 G6 q! \$ Z
b[1]=a[1]*scale;0 `; @" S9 @$ t: j6 ]5 d" N
b[2]=a[2]*scale;
6 @/ _( j D' {: [1 D8 Q}
: ~$ b- v1 ^1 d4 |5 c% g! L6 j# @* D5 g" ~( Z* n$ l6 B1 \9 y7 M
|
|