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

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

[复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
  t% D' A* i$ p4 W

, n, o6 @( i3 m! z6 G- d$ ~. }( ?  Q6 v8 ~6 G) {" x* ~8 L
#include <math.h>
; }. }! s1 p! s5 L( D& a( h//矩阵复制) C/ H. X- r! g# k7 t% q
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4]): k) D  [! ^+ T/ n3 A
{
1 u* _5 y7 W5 o; P& U# J' O" Z. H        int i,j;$ [: m& s# ]; F: s3 |

$ o5 k5 |! D/ p" Q5 O/ \) e! C        for(i=0;i<4;i++)% K) J8 U' P& g2 \- y/ _
                for(j=0;j<4;j++)
! z) w! M7 [* Z; l: j                        to_mtx[i][j]=from_mtx[i][j];) G; h* z0 n1 Z
}% d2 U( G7 X# [2 q
//矩阵初始化
* y" n1 P0 s; S! ^% n% F; O7 Svoid Project_Matrix_Identity(double mtx[4][4]). Q# b7 A, Y5 n- S4 V4 }4 ?
{
  o- w3 g9 p$ Y! N8 o/ Y' ^8 ?        int i,j;! E, N2 S1 ~& J' o0 n' S
       
! a& @; l% o6 y1 R, Z6 O- @        for(i=0;i<4;i++)4 o, m+ s* ~& y9 D& A
                for(j=0;j<4;j++)
* ?& q3 d! D1 p3 c  Q( s. I' [3 X( e                        if(i==j)$ d' i" p5 U% a/ |
                                mtx[i][j]=1.0;& i: z; y" x, D& ^3 i; g
                        else# p  I5 o% `  X1 \, [
                                mtx[i][j]=0.0;" S8 N3 N/ n/ n3 ]* O2 k! f( v8 P
}! _2 i; E4 D+ }$ g) S- P# F
//矩阵相乘: J0 z& B+ G% b' d
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])3 o: K1 r' O* a1 \
{
. v6 B: y* m' e  y0 B1 Q) v4 `
; l1 i* d! y8 [; \  Z2 h6 ]        int i,j,k;4 {$ j( q+ U* \+ s
        double left[4][4],right[4][4];
2 a% D) A9 ~5 |4 b3 s0 g% Q) K' m0 i! G1 D# X3 ?, j
        Project_Matrix_Copy(left_mtx,left);5 H1 `# q; L1 I0 j, x
        Project_Matrix_Copy(right_mtx,right);' P) G) |" a  C4 ]+ X6 r
        for(i=0;i<4;i++)
% G' T0 a- A. g. S1 v  w                for(j=0;j<4;j++)
  h' _# E3 E4 T3 f2 e7 K! P* b                {
" o1 A% C: q& [9 V0 u! L% L                        get_mtx[i][j]=0.0;- G, J5 z" _# V" F
                        for(k=0;k<4;k++)- p8 o. Z% v8 c; |
                                get_mtx[i][j]+=left[i][k]*right[k][j];% p8 v( a8 \1 S$ m/ V
                }2 A- U' r4 d% F
}
4 r$ i# i, M2 z9 ^/ e//转置矩阵. Y1 F# E) @' X' j! @4 X7 L
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
8 X% Q% p) S; o2 @. `1 R7 G{4 k- a+ c$ L, W. J/ T7 a
        int i,j;, E1 D. ]: }" H3 k" }6 g
        for(i=0;i<4;i++)
) r: U& Z+ p: g0 \5 t3 m        {* ~! q& L9 Y0 O
                for(j=0;j<4;j++)
; R. r9 a6 x* c% [6 l- S* _! j+ G                {9 \; l+ u8 u/ k! ~
                        transpose_mtx[i][j]=mtx[j][i];8 p; G& D4 {8 t- A0 q2 b) G
                }2 ]5 C- P" q& d1 o
        }
+ T  `6 O- [# ?, w( |}. `. e' \4 i5 w% X0 p( x
//从11元组获取变换矩阵
6 [6 J9 z- o3 ovoid Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])8 m+ b+ I0 o' m0 O
{; E5 v" w! b' Q- ?$ z# y
4 p+ Q8 w/ Z0 l4 {
        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
& B2 U( j) e' G        int i,j;
+ g( h% w1 @3 @; }7 ^& s        for(i=0;i<4;i++)
! i$ J4 i; M( N& ^0 E, g        for(j=0;j<4;j++)3 `6 [' K6 t+ R# F4 \: [7 j
                if(i==j)4 N# x* i* S' H; o3 w, J$ n
                        pos[i][j]=1.0;* p7 A3 k# M# H+ P
                else
: g) U( k" Y2 ]                        pos[i][j]=0.0;4 _$ `6 k' Z# h! P  U
        pos[3][0]+=translation[0];4 Z6 l, _+ @: B) {- Z
        pos[3][1]+=translation[1];6 c; |8 b" ~# `
        pos[3][2]+=translation[2];3 ^4 d" ?- a% H
}6 H3 X, u' o3 S9 v
//向量缩放
; u! ]7 `: ]: L. L* i9 ~# Fvoid Project_Vector_Scale(double a[3],double scale,double b[3])
- {. F; n) _3 D. j" W" M: h{% u  [1 F' X* j3 @( Z! b/ ~! r
        b[0]=a[0]*scale;* y! s2 _+ x% c: w1 z
        b[1]=a[1]*scale;
  B, Q3 Z. g5 }. |5 S) f2 U        b[2]=a[2]*scale;' h5 U5 e  B8 ^# c8 y5 u
}& c5 ~3 y6 d" E3 n) ]; N8 |
! y# T) e9 u- V- R: m7 H0 g
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了