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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
9 i7 e! W, z, o
1 L9 b3 M6 t0 k5 x& N
9 y. r# @1 @  W6 h- P6 \2 z: u
#include <math.h> 5 P+ g! g: T# A0 l) }& {9 r5 }
//矩阵复制6 J' m1 I! S; f
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
' o/ q0 `8 C0 I$ _3 l/ Q0 ~+ v{% e/ U# h- F6 j
        int i,j;
) Y1 B6 z( s! V/ }0 h' }/ b' F1 @  O! X: b3 U
        for(i=0;i<4;i++)
) V; Y- ?5 i- C                for(j=0;j<4;j++)) _; X/ C! B8 f
                        to_mtx[i][j]=from_mtx[i][j];4 r) r; r2 y3 _7 ~! I9 k, @! v" T& x
}
9 Z9 C7 _( I) @& u) j" y8 d+ E- w//矩阵初始化
7 y3 D1 a' M: F$ bvoid Project_Matrix_Identity(double mtx[4][4])
; R" J9 g5 Q1 d% b1 J" J{
: E1 O& W- e( R" A1 y8 v+ C3 e" A        int i,j;: y8 {$ C- x& G7 P3 v2 P
          R" ^% d0 Z  R( K4 F7 Q
        for(i=0;i<4;i++)
) ?8 h  h6 m  A% |/ T& T- o1 ?                for(j=0;j<4;j++)' \# F6 d( D! [+ G) \4 P3 [$ B. N
                        if(i==j)
) Q$ ]1 z9 J* w                                mtx[i][j]=1.0;
; ^: ?" D/ d& r4 X8 E3 {                        else* @4 j) @, ]* M( M& F' [
                                mtx[i][j]=0.0;
: S  h  i( L: ~- x1 d6 x}
: i3 t. X5 N" l//矩阵相乘
, r: Q4 |/ G3 R1 `/ q8 [# Wvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])
" z/ K* a+ ]7 c. W6 q{
, k9 k' Y) w, d- r. O2 E' K- ?/ k2 z- }& x3 g" U& }3 c1 W
        int i,j,k;
* R. v( ^. Z1 f        double left[4][4],right[4][4];
% y% c5 r$ _8 _. z/ l5 E8 Q0 U7 M' N8 I
        Project_Matrix_Copy(left_mtx,left);
' e6 f  U' R& O/ g' _! _) R  |- i        Project_Matrix_Copy(right_mtx,right);- e! ]* i) T0 k+ a: q7 l
        for(i=0;i<4;i++)
6 b4 U" A. Z3 m; H% N7 g! I' e7 Q                for(j=0;j<4;j++)
1 C5 `2 K$ I! w2 e+ T' E& Y1 I                {, ?6 u$ S4 T5 Y, h. J
                        get_mtx[i][j]=0.0;4 Y& p7 k0 r6 I/ L7 j; I
                        for(k=0;k<4;k++)" u+ q! x, G# f
                                get_mtx[i][j]+=left[i][k]*right[k][j];
/ ^, F0 u5 a. s7 o6 ]" {                }. O7 z1 c$ p. E
}
: S- @* z1 {+ ^0 X9 L//转置矩阵4 J' T* x+ y! Z
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])5 _, ~7 @( Q9 `) M
{
3 u' o: }6 Y- G& y        int i,j;6 e) ?& `! O/ X: c8 A: c
        for(i=0;i<4;i++)
( b  d( [5 R* @* G5 K, J        {
* E  S2 K8 C4 C4 j' b( F. o                for(j=0;j<4;j++)
: D) o/ i( I1 \8 n. V                {
) b  `) }/ Y3 o5 N                        transpose_mtx[i][j]=mtx[j][i];: J7 ^4 ^) W4 s) H! |4 O8 w1 k7 K5 j
                }
1 l9 v% g: l' F* I" ^% `        }9 Z1 R  K2 f& a; d
}
/ S4 K7 C/ T- J0 d$ k2 {//从11元组获取变换矩阵
7 I, X/ r9 r- _' t) ]4 Gvoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
5 y% t# Q1 ]$ X$ z- i; f{
( Y: m7 o7 Y- [! U0 w6 T. K' g$ l! w6 g. ^: P2 _: {& R
        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
4 G! R0 c2 M  x* W9 Q        int i,j;" y  {3 t5 x( h+ N( T: o! N0 C
        for(i=0;i<4;i++)6 f5 g6 \2 e& g) j% ?
        for(j=0;j<4;j++)+ ?3 Q/ r2 s+ B: y  _/ d- B
                if(i==j)
4 |7 H5 ^6 r2 k. x                        pos[i][j]=1.0;: U" x7 @5 j3 D0 i  A: P3 _8 e# k: I
                else
# A" S/ q; \' `, T3 Q: h+ [5 \4 Q                        pos[i][j]=0.0;/ g& t* H# B% G4 S% P8 M4 |# [2 t
        pos[3][0]+=translation[0];
- d/ [1 W1 [0 k6 Q        pos[3][1]+=translation[1];
1 G2 }, y2 u' E        pos[3][2]+=translation[2];2 U3 H( i# q% e5 U: X( j- k
}
6 q$ k: L4 S, w5 p" R  l! r//向量缩放: o7 g- f2 y3 ~7 P! k
void Project_Vector_Scale(double a[3],double scale,double b[3])- O' D" U/ }; a. o
{: g  Q( u2 X- J9 b9 X
        b[0]=a[0]*scale;
) o+ G2 v* n8 r6 d& d, V/ _        b[1]=a[1]*scale;6 ~; `* X# x2 R( Z; S" I( b$ f
        b[2]=a[2]*scale;, c9 X& {. p3 s7 W  x8 t! O- L
}
9 |1 u( j2 M, f$ a2 X3 v
  p! h  B! w: t0 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二次开发专题模块培训报名开始啦

    我知道了