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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

5 A" Q; D: P3 f& t$ D( \+ W$ P, x* X) F: p% l

: D! K1 W2 E* m" s4 J#include <math.h> 2 k5 q9 z) i0 @) ~; T: M4 O
//矩阵复制& H' P# l3 l1 L3 h" W. |
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])5 e! U5 {  P- |) ^# i
{3 M# O* }; V; w. S: B
        int i,j;
: J5 x; v, q5 B$ B$ U
) E4 b0 j4 d. Y% \/ E) G& K) J        for(i=0;i<4;i++)
0 Q% c+ j9 t/ t  Z" N                for(j=0;j<4;j++); |: X! c/ E* P8 a. H
                        to_mtx[i][j]=from_mtx[i][j];0 a  q" L) x$ P# f' ~- M
}6 z/ Q) V( N1 l. _0 Z( g6 {
//矩阵初始化' F4 J, P9 C" ^) J; L9 R5 o5 z
void Project_Matrix_Identity(double mtx[4][4])
# ]8 \7 R  g0 ]6 B7 `{" {9 f7 `( _3 B7 Z6 f# R$ ^" W
        int i,j;
# d* |& U7 C6 R0 i        1 q4 F/ {' M; H5 F: i: w! H$ l4 u
        for(i=0;i<4;i++): e* m9 j  m1 m1 Y! `
                for(j=0;j<4;j++)% G+ `4 w! q7 p4 b/ ?- M5 c
                        if(i==j)
# E3 F8 S9 i+ j) _                                mtx[i][j]=1.0;
* V3 Q6 }2 I4 E0 ^0 H2 F                        else, J2 T! U. P( Y+ I$ ]. n7 u7 y
                                mtx[i][j]=0.0;8 v1 h% w7 r- T, t0 t1 @
}
- E5 e$ v! l& ?5 T//矩阵相乘6 [# h. A) i2 ~+ ?
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])4 ?6 D) F0 t( J
{! S; ?9 @7 M. G- q  `9 r
% I4 B5 A$ z7 T- G4 a/ k5 t
        int i,j,k;
+ J! n) C+ r, G+ k7 A0 w) N' D, Z        double left[4][4],right[4][4];
$ N+ x, G( |+ \0 a; e5 W
/ l' _1 \- J- F* J7 ^        Project_Matrix_Copy(left_mtx,left);
8 G9 a. ^/ Z3 |& ~        Project_Matrix_Copy(right_mtx,right);; M2 {6 ]8 O) \  p
        for(i=0;i<4;i++)! V( ]4 c, F, f7 F: e6 w. [8 U0 u0 F
                for(j=0;j<4;j++)
# O" \! E( m& w. F( j% T  d                {" l1 p2 ?8 k6 J
                        get_mtx[i][j]=0.0;# u, E, v- g5 N
                        for(k=0;k<4;k++)) B! c6 l# ]6 L% r# @- i
                                get_mtx[i][j]+=left[i][k]*right[k][j];
4 j4 r$ J- t9 W4 J9 v: F                }
5 x9 w4 K( j* b* o}
( x& T# C/ d/ z* q( f( X% i2 s/ }//转置矩阵
! K" F8 w  I/ mvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
2 Z# B! F# n) p% K% |{1 T6 W1 _8 G( _" Z% ^, Z
        int i,j;
2 p0 T, o# E- y/ Z' s! o        for(i=0;i<4;i++)
( L3 U4 ~4 N. j* r1 l        {
3 z4 \0 r$ Q( D  b0 v, g+ m                for(j=0;j<4;j++)3 m3 A- n) o* U$ l
                {/ \, p8 T( q" G4 ?4 ]
                        transpose_mtx[i][j]=mtx[j][i];
8 L, I" {3 V$ p- p% h" q5 R7 \                }
) H! Z& Y, [! K: ^/ p        }. Z/ T, p. J8 I, h/ `0 ^& G. y+ c
}0 @# F+ v& \+ N# m3 Y& c  i
//从11元组获取变换矩阵% @8 o7 G5 D6 ?( h( N$ e  d
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])4 \$ k  ]& ~' K! p5 [
{
/ m7 R7 y- B- d
0 r2 C; o$ B! Q        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);: w+ I& }! y9 U- ], |: r7 }( s' l
        int i,j;
% T4 q0 F2 j0 V        for(i=0;i<4;i++)$ D% O* a' G! X: B
        for(j=0;j<4;j++); S' e3 Q  v6 L+ D$ Y) o; L
                if(i==j)
) J" p, Q- ^' b3 R2 `" ]! q                        pos[i][j]=1.0;
) Q" o. H" Z$ h2 Q                else/ t5 q- s# \9 V1 d! p% B. Q+ Z
                        pos[i][j]=0.0;& U2 p8 b1 X5 V& c
        pos[3][0]+=translation[0];
; Z& `9 O5 V; I1 u        pos[3][1]+=translation[1];" g. `* C$ F2 E' {. Z$ f
        pos[3][2]+=translation[2];3 p) i9 p* K6 N: g* J- }/ E
}5 F1 k- X. w# i
//向量缩放
( V  @, C0 y( X; M* \  Rvoid Project_Vector_Scale(double a[3],double scale,double b[3]); g1 n( h, j4 ~0 Q9 U; I
{
  o8 t7 @( U* E$ k% s4 n  x6 y* e        b[0]=a[0]*scale;
6 e$ k5 r$ m! N6 w, @2 F; u0 a. C        b[1]=a[1]*scale;
+ w) V& F& u6 S* e; q* B/ e        b[2]=a[2]*scale;1 I# m9 |) ~2 Q& Z9 B" W
}, l8 T7 `3 Y" [) B' p! U
$ ]# S4 q3 E! N6 w+ B$ S# X/ h6 }
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了