|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: I- j4 ?: q' a2 o/ j
0 v( o0 P1 l4 {
' g' [* K/ ?. ]. i3 P# x2 P#include <math.h> ' L! s( }7 W5 m) }, T4 s
//矩阵复制
; `2 S3 _6 U# e9 F# }* Jvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])8 }# q3 E4 [0 v+ j
{
7 R7 a+ p n# s7 H4 i int i,j;
" w' [& X% x, J- E# N
! A- Q2 e/ c( R- \' P for(i=0;i<4;i++)$ p4 s( W6 n {' k
for(j=0;j<4;j++)6 z |+ F3 [& I
to_mtx[i][j]=from_mtx[i][j];* O) B: c' p6 D) o
}
3 I+ D8 o: L, W( v5 f//矩阵初始化
" W1 i U1 a& j f# nvoid Project_Matrix_Identity(double mtx[4][4])
; U$ G& a3 f$ D: o3 a{( y& U8 y) E& V0 O. k
int i,j;
* |* M6 {3 [( M$ }& f# y! h : n* r$ g3 i# T1 n! d
for(i=0;i<4;i++)
* o1 K1 ]* C$ x3 \9 n. u: L- Z; t7 C for(j=0;j<4;j++). ?9 j& @7 X& h7 g5 k9 t
if(i==j)
. J$ {: N8 h( D( ~ mtx[i][j]=1.0;+ H/ K! Y9 [; C* n) _) J/ T; R
else
7 o- W" R1 s% p- p mtx[i][j]=0.0;
* {( P, i; u( L1 ^6 S}. V; Z- I$ a- L( q9 K4 u
//矩阵相乘
i8 ^) O5 R# p. s/ U. D, wvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])5 [+ `$ @* p! k! c# R) M
{
4 C) \% I: C% v- O& p1 d$ C3 ^+ A
3 w( c% W' x8 { Q int i,j,k;1 u: i+ U3 N8 `9 Z# H
double left[4][4],right[4][4];
1 p9 F# Q- C4 u+ s0 \- A1 R4 J. f5 }; P
Project_Matrix_Copy(left_mtx,left);" W# K7 m, N' U# Y+ \% z
Project_Matrix_Copy(right_mtx,right);
$ A- D, |7 D7 G5 U for(i=0;i<4;i++)/ m$ w" Q7 V4 C2 J
for(j=0;j<4;j++)3 u |% J4 N, b$ w" r3 k
{
! w/ v, \: B- g get_mtx[i][j]=0.0;$ M0 J/ P0 M+ Q3 L8 i
for(k=0;k<4;k++)3 {# ]( Y4 b* | G/ Q: E1 l
get_mtx[i][j]+=left[i][k]*right[k][j];1 c$ m; _" }! f. _$ r
}3 u0 j: k( u+ u, |8 d- U
}
. u8 F3 X5 _) A. o1 X: {0 g ?//转置矩阵& X% o0 I: C/ |, z( W: Q- t
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
_6 a" \+ ?4 i; x: _- T5 n# b! |{/ G* ]( f, p/ @" T, e# n+ L
int i,j;1 g) P8 J) r! ?8 ?: Q _6 k
for(i=0;i<4;i++)
' \7 h3 R9 `, k1 U {2 O$ r+ p5 x9 t; j' G8 \3 X
for(j=0;j<4;j++)
/ l2 Z* u9 i- B {
9 J$ f" s/ D! H1 p transpose_mtx[i][j]=mtx[j][i];: E" |' C4 {5 l, z
}$ o1 e" a# b' L! h/ }1 r
}0 M! T( L4 ^1 v# u8 w. C- w
}$ a, @% g2 ~* D
//从11元组获取变换矩阵
$ C" V# J8 Q8 r* ~void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
7 [0 ?" } ?/ K5 q8 a& m9 d{
' w E4 Q! H0 B& a: y
' }7 r" |5 K2 A% B/ ^; i6 D J //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
6 ?+ y9 {$ u# @' r" ]: b int i,j;) q. f" ?; m1 z: f% S0 ~
for(i=0;i<4;i++)
$ k5 U5 D+ _. D% e for(j=0;j<4;j++)
& O; ?. A4 I; H; y F if(i==j). ^5 h5 Z8 X; n N1 B
pos[i][j]=1.0;
$ @* \% H% a( g! [8 k8 z( H else
+ S- G3 v, O1 C& u' s* ]% g pos[i][j]=0.0;. ]3 r$ c' S7 f2 P- l [4 x
pos[3][0]+=translation[0];
% }% v* U# g* I, {7 | pos[3][1]+=translation[1];
% k* `5 H; N3 `, \/ j/ M8 j pos[3][2]+=translation[2];6 o2 ^1 d9 G5 a; c6 Q
}. W& c: Z+ f2 @& {5 V# S( w
//向量缩放
J: N: _! w+ A" {void Project_Vector_Scale(double a[3],double scale,double b[3])) n h+ I: C! z7 n0 V( \$ e
{
( i6 J" k; l& r" R4 \) P b[0]=a[0]*scale;
# h& |; g: V( h6 a; F1 y b[1]=a[1]*scale;
& X+ J1 R" d" m7 E2 Y) H2 j b[2]=a[2]*scale;
4 p" m7 Q8 k. W! }5 }}0 x; H% Y( D* w7 U# O
' v$ e; x! e1 |. B# Q2 p3 ` |
|