PLM之家PLMHome-工业软件践行者

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

[复制链接]

2014-8-25 15:14:54 3636 0

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
( R  g% ^# A% X5 F7 z( `2 ~; N3 [
9 }+ e/ v3 S2 V; l2 y$ r/ G' u, u
$ V, p1 P: {+ h8 ?: O2 v
#include <math.h>
+ n& ^  ~2 I  i1 b( ]& X//矩阵复制* q% |' G+ @2 P. R0 X
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])) @( _+ F! \0 \, E3 `
{: L3 R9 G: D! g4 ^
        int i,j;! Q: K& }2 @$ b1 J

5 ^/ o% P2 t( X: V3 E& R/ G' |        for(i=0;i<4;i++)
, m! N; L' [: Y+ |2 q1 F                for(j=0;j<4;j++)- U4 z, }& V  k4 F8 j
                        to_mtx[i][j]=from_mtx[i][j];
5 C1 D- [% U4 O}4 l' n( {- E* y0 U  i, j% O) y
//矩阵初始化
  o4 N8 m5 Z- evoid Project_Matrix_Identity(double mtx[4][4])7 x/ ~* v1 Y, _) w5 g5 K6 T
{8 B; t" B9 Z! |# X; R+ [
        int i,j;
. }0 P) \8 g! U        ; P0 E6 q4 F3 K, l4 A; d8 }
        for(i=0;i<4;i++)
+ O# ~% y, t: S                for(j=0;j<4;j++)$ n6 e7 S# ~" _) L
                        if(i==j)
" _: o; n+ X; c; g# L/ D2 {                                mtx[i][j]=1.0;2 z' U0 a5 ^- V4 w
                        else
# K4 O9 J! U! n; g6 T+ Y( q6 [) l                                mtx[i][j]=0.0;) J: s" K: D8 {6 h* H0 Q
}; M% ^5 ?! O' o1 G7 R
//矩阵相乘
! y3 T+ s$ H' n) m# f& V3 }5 [void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])# o, {4 K& `5 Z
{
4 V7 b( P% R! d4 `% l- ]8 w" K& _( t$ ?
# C( i, v6 t+ n        int i,j,k;
/ e: d7 b0 B- }        double left[4][4],right[4][4];; A, `! D. b% v/ A/ z  `' p
% H) D2 H+ @2 K. s+ e/ F) V8 O* n
        Project_Matrix_Copy(left_mtx,left);  i. P" D, T4 A, b% [/ n8 o
        Project_Matrix_Copy(right_mtx,right);
* u5 i3 T, G$ p2 f4 P0 r        for(i=0;i<4;i++)
2 P. N+ x# O5 g0 {& o% s# t                for(j=0;j<4;j++)
1 Z+ U5 J+ t) V- d" D! Z8 L4 L                {1 n( b8 n; ]  J
                        get_mtx[i][j]=0.0;. S& g% m, j2 P9 T$ T
                        for(k=0;k<4;k++)
% P- m- B1 W$ f: R. p3 C9 l                                get_mtx[i][j]+=left[i][k]*right[k][j];
- L9 ?0 n6 K' L4 n3 f' s                }( }& [: \6 E+ D
}
3 `% }) L. h  @//转置矩阵
: X6 {' \4 `" \  S" w( dvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
4 t5 G' T5 V# ?$ I$ ], l{; m9 Y& Q5 M4 K6 h  [, q0 D
        int i,j;- A! z* k6 U; U1 n0 ]7 R! w7 ~7 `
        for(i=0;i<4;i++)) d: x9 A/ _5 h2 u
        {
! Q0 L2 E) R  f8 [0 _" A+ ]( Y. x                for(j=0;j<4;j++)
, a: d6 b  y6 ^. F                {: j) C' S% Y$ K
                        transpose_mtx[i][j]=mtx[j][i];
% }' A+ F1 `) J2 c  a! k& R9 E                }. ]: \  C. P2 C$ K1 G
        }
" e* ^$ |: k) ^0 e! r0 J}) Y3 I% k8 \3 W
//从11元组获取变换矩阵  n4 K( R4 |0 s6 y* r, c  j( m! f
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])* X$ p- J  W' ?1 l
{
5 p$ F7 i! m" v. A7 X3 X2 h  B2 Z7 m+ Z) B7 {0 W4 Q, X
        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
/ Z7 ^8 p- P9 v        int i,j;
" }" c& M/ @' Y; c. y9 w  f        for(i=0;i<4;i++)& O& C  f# }9 L; L- @
        for(j=0;j<4;j++)  m' H( F2 o& u" [
                if(i==j)
1 v7 y2 x3 N" W, n/ ~" [# v                        pos[i][j]=1.0;
& a; w0 y& `7 M" ]9 L! l                else3 t7 X: d! @$ O0 w6 l5 O) n
                        pos[i][j]=0.0;
* X3 O4 D& X2 ^, b  S1 V/ q        pos[3][0]+=translation[0];4 i) n/ V7 K1 l. o. ~. N0 N
        pos[3][1]+=translation[1];  ~/ |, R' B: |6 R! E
        pos[3][2]+=translation[2];
- X: U' `! e: n7 L0 s8 x9 S}
. `; m" O& C$ x//向量缩放
; U* Z7 Y' F) x- G  J* e& fvoid Project_Vector_Scale(double a[3],double scale,double b[3])
- \0 C7 O, q7 @& d6 t, _{
, H5 i" V" v8 u  ?/ r8 W% K        b[0]=a[0]*scale;- a* U- l; O# h: r& V
        b[1]=a[1]*scale;
1 R1 c) Y9 a3 u! d        b[2]=a[2]*scale;# a& s( q+ ]4 J7 d. M
}* a& m( r; V. {4 o: m6 z0 O' p

5 m# n2 Y# _9 @+ Z, P
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了