|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
K J# ?- X8 ?! |6 {( z
3 H* G% z$ C8 }/ {
?# d1 S' `2 z
#include <math.h>
2 a6 }6 s0 Z7 Q+ z' P2 x7 F: _//矩阵复制# `9 l9 x& x4 c
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
! ~" s) d3 ~8 _! O{! d5 ^0 W: O+ `: l( V
int i,j;
8 ?( ]/ J* i E& ~2 I' E: K A+ Z
0 a+ U2 m: Z4 u2 y* I for(i=0;i<4;i++)
3 U \1 W, H$ y* y2 D for(j=0;j<4;j++)" J% e e# q1 v( V# D
to_mtx[i][j]=from_mtx[i][j];
- j- O; i+ o' S8 V6 S) g% w}/ {% A A( o6 E8 ?! b
//矩阵初始化
9 C0 ?# i6 ]! m- Evoid Project_Matrix_Identity(double mtx[4][4])- H @+ X3 A/ W/ p! A8 A
{3 c' y0 k6 n J0 B9 L+ V
int i,j;. a* B0 R) f, C1 w
1 J; X* b) ]7 d# a$ [
for(i=0;i<4;i++)% H% u( ~+ ]- [" X
for(j=0;j<4;j++)
3 ]- o) e* e" _% D# ~ if(i==j); w) _! R" W( S0 h6 |
mtx[i][j]=1.0;
6 |0 U1 h' r6 d. | else9 Q0 u) Y, @" y2 X
mtx[i][j]=0.0;+ ~* W8 a& b4 e) Y; d) O
}# E: \6 ?( F9 ]# ?3 \5 @: m: I
//矩阵相乘
5 W+ x% a" U) r8 t' h2 u: Evoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
1 ]9 F: a/ q' V3 y, N* n( l{' T' o* b6 R7 P0 W9 i4 Q6 J
0 s" l8 `$ e5 i" g" _' o+ Q% h( q int i,j,k;
3 g/ [3 j7 x8 v: @$ q! P% J% m# x! c double left[4][4],right[4][4];: s/ X. y$ l4 d: i3 U) [3 H
! D3 c2 C* g6 L5 `: C
Project_Matrix_Copy(left_mtx,left);" m" b$ K+ q7 C) q5 r
Project_Matrix_Copy(right_mtx,right);5 x/ i' p: `$ D7 Q4 M
for(i=0;i<4;i++)
5 |6 q+ H1 |' Z1 B& W- X for(j=0;j<4;j++)8 O1 s* k" v) r) L# {$ l5 l3 x* d$ n
{# \9 P) y; N% N- L! U3 m {5 X
get_mtx[i][j]=0.0;
7 o6 F. [; Y8 Y8 m6 o8 X2 r: e" h for(k=0;k<4;k++)
6 Y; U8 t ?- P: N2 l9 n get_mtx[i][j]+=left[i][k]*right[k][j];
" A( s7 U1 O2 a; l* D1 J5 k }
7 q. w1 i5 V! b/ K' e" k1 y7 Z}+ V. H1 V9 L/ ?2 t
//转置矩阵
" T( y/ \) k2 W" evoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
- u0 [' q* i& {{
/ {& O4 V7 P6 o+ M7 m5 X7 { int i,j;
9 p- H' X' W( E* V1 p2 i for(i=0;i<4;i++)
; V$ Q' ^, C, e" }( ` {
& z. a) W) F: q4 s for(j=0;j<4;j++)* ]9 N. }8 x" \* x
{
f$ K/ r( P; U/ V8 i transpose_mtx[i][j]=mtx[j][i];
, l4 z4 X1 h. [2 w( O; _5 g } W0 H# w4 ^2 H: ]' k6 m& g
}. |- [' m3 ^" L" h( f$ ~8 m
}5 [* P U8 Z! }: P' a, r% u. U
//从11元组获取变换矩阵
6 @% @, U6 D% q) a. K) E/ K l; Wvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])0 q+ L ?- o p7 {% U$ _8 W4 W0 ^
{
8 u& k4 B) a' \" [! y8 P
$ h" ^+ A% i% @8 t# `; R* o //Project_Matrix_Get_Rotation(rotation,point,angle,pos);7 K. @0 p8 k4 @+ I: N! z. W3 X
int i,j;! J0 h8 P3 m9 K2 H
for(i=0;i<4;i++)- b- r2 R s, w' v# Z& A: |3 m, b2 u
for(j=0;j<4;j++)! \% J' |) Z& o; u( ~6 B
if(i==j)
8 R4 z1 r7 S% a3 [/ m pos[i][j]=1.0;
, m5 n: A7 @9 D else
( ?' H/ Z. ^/ m& A5 r$ {# A pos[i][j]=0.0;
n) Y I! N Y# K( B pos[3][0]+=translation[0];
* w0 F7 [% d6 k pos[3][1]+=translation[1];
b3 s+ O) _8 r* b$ b pos[3][2]+=translation[2];
- p+ j+ t4 W$ a p: }4 z6 Y}) C" \6 K& | Y; v9 ^' L
//向量缩放
: C- F/ h n- R7 O: F( I, Svoid Project_Vector_Scale(double a[3],double scale,double b[3])$ t) ^% v/ Y* T8 F+ g8 B& S
{
2 Y o$ i4 F1 @) f b[0]=a[0]*scale;
- D7 d( W5 }+ u, S, _* P& W8 W b[1]=a[1]*scale;
. a- ]5 \/ U8 T( b b[2]=a[2]*scale;
" o3 `- l: r- Y/ U}2 f, s- q4 a6 o* @
( ^( i3 [& a* N) g+ q+ t, q
|
|