查看: 3700|回复: 0

[二次开发源码] UG NX二次开发源码分享:矩阵操作的基础算法代码

[复制链接]

4

主题

3

回帖

40

积分

管理员

积分
40
发表于 2014-8-25 15:14:54 | 显示全部楼层 |阅读模式

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

×
8 g6 n6 Z, Y- o7 d8 r0 }( M- ~" H6 L8 T
! r  C% ]% W; O- {, C. ^

+ s( T; S; e5 g# C) ^- p: h#include <math.h>
8 r6 z" P: Z5 F+ P8 _( {* h6 K//矩阵复制& ]' f. M$ Z! t- {7 i
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
9 _* f4 ~6 a9 F4 [% s9 T/ L" M$ b{2 P: K4 ?3 ~- w  _3 R
        int i,j;
1 C" Z' Z  f' H; j
& j1 f; h! |8 ?5 ^* N4 g# o4 r6 @- Q        for(i=0;i<4;i++)
6 ]3 \5 d/ M0 d; ], }' B7 \                for(j=0;j<4;j++)
& a+ o" B- [. \; p) H                        to_mtx[i][j]=from_mtx[i][j];' u% e& {4 _! Y8 D7 W9 }# \* l
}
# b$ n1 p  _- V" U; z$ q//矩阵初始化) g  ]% U' {/ t1 B4 |
void Project_Matrix_Identity(double mtx[4][4])
+ m7 O4 |( m6 J2 Y6 X8 J# H{6 K5 o3 ^% K2 g  E% y+ Y9 B
        int i,j;
0 H8 X9 `8 D7 i, r       
+ n) B+ C% s  X7 d; ?, M        for(i=0;i<4;i++)$ K- ]* t; e, M! H: A$ {  a; r
                for(j=0;j<4;j++)# v7 m1 |* b- e1 @3 z
                        if(i==j); I, o# l6 A: M  \" z9 @) i
                                mtx[i][j]=1.0;
* ?/ Z6 y( c4 |                        else
' i  ?7 Q; G% I9 R  Y/ s# c                                mtx[i][j]=0.0;
8 I2 ^9 H4 L+ f7 W1 z% O3 T}
6 u) J( e1 @; g, G! `# \( D//矩阵相乘
# ]7 ]. V* B$ Cvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
0 `* m: D, I8 W; p4 W* [4 R/ ^0 r{
7 U1 d) z/ t4 N0 ~1 j9 Z) b8 I
; n' f$ p& D" H9 ~/ m) k; H        int i,j,k;
4 z* c" _# U- _0 I: h1 g) ?# c        double left[4][4],right[4][4];
. ]$ e9 o/ t5 \- c. c* G. k3 G( ?. J: ?
        Project_Matrix_Copy(left_mtx,left);
) E  u/ i0 z/ A( |! c        Project_Matrix_Copy(right_mtx,right);' f, b. H. h' u" }) r7 P. O
        for(i=0;i<4;i++)  e  M9 e) \( Q1 O
                for(j=0;j<4;j++)" M1 W1 M; [; M; n: Y
                {
0 V. R; U% \( ^: h5 P0 @) w                        get_mtx[i][j]=0.0;
) T8 F  @9 s8 ^9 i  H* O  o                        for(k=0;k<4;k++)
4 ~# ~! a* o# r# A                                get_mtx[i][j]+=left[i][k]*right[k][j];
6 A# B7 b+ d" j  A. r* F8 B                }
: j9 a. S1 c7 A# K0 W+ s" K}1 \, I" M5 _1 ?6 s: N5 u1 n
//转置矩阵
; G! r9 r/ A. C& Y0 [void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])4 k* j/ O: G5 j$ R4 {# o2 z
{  G8 Z- S$ g- m- i& ~8 U
        int i,j;
- {& G: \4 C0 r  B        for(i=0;i<4;i++)- C8 y0 g6 n' i# g, I5 H; m/ C
        {
4 n4 N  o% b$ ]5 P: W                for(j=0;j<4;j++)' p3 ]$ r! H: z9 w, S! x* ]
                {9 q9 B! }7 {+ {$ t  ?# Q" O% `0 l" m
                        transpose_mtx[i][j]=mtx[j][i];
* K* P9 K8 n" O! ?$ }. F$ U9 ?                }. j" V1 t$ N1 S6 T
        }
* a/ j4 A$ S% |}
- ?: A9 H% p  f8 P( V//从11元组获取变换矩阵
1 l3 Y: J  Y7 ~, v0 Jvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
" y, |3 T& E/ d* i: `1 J1 O; V{
2 w; A" X$ p" v3 w- X& R  X2 x# c  O3 v  J8 u
        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);9 f4 y( W6 n6 L& P
        int i,j;
2 m9 z& M0 T5 S- W% N' l$ B        for(i=0;i<4;i++)
3 P' K) ]4 U6 o        for(j=0;j<4;j++)
7 B: k  h6 l& l: m5 C: O. i                if(i==j)
4 u$ ^- m1 L& J  N7 b( i                        pos[i][j]=1.0;
- z" f: R% R, S0 e                else
/ y! @' q6 t% i0 ?4 S$ u                        pos[i][j]=0.0;
* \6 r$ L& ^7 L        pos[3][0]+=translation[0];
5 M* v6 t5 k3 j) K  p: N% [        pos[3][1]+=translation[1];
5 N# b$ L/ h/ x7 D) q; `, `# S" E5 Z0 Z        pos[3][2]+=translation[2];- M/ v& T8 b! d: Y
}
9 ?0 ^5 Q+ B* k2 J//向量缩放
2 _- X3 N: I. V" O- Nvoid Project_Vector_Scale(double a[3],double scale,double b[3])
$ S$ m6 O. G7 B( K: ~9 v; e{9 N. [* G+ p" T, t, [, D, Z: @
        b[0]=a[0]*scale;5 \: G8 K  \0 R4 c, x# m6 j
        b[1]=a[1]*scale;/ F- E6 P4 A4 H, V2 _
        b[2]=a[2]*scale;5 W8 b1 ~" o: q& J
}0 j' [. ~- T) c$ \$ ?3 K
" S1 M0 F% k; Y
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

在本版发帖
关注公众号
QQ客服返回顶部