PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

admin 发表于 2014-8-25 15:14:54 |阅读模式

admin 楼主

2014-8-25 15:14:54

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

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

x

' r9 |3 R5 s/ K5 {$ _  n. ?. v
; A2 U1 H1 r  F) Z2 _' z3 `
/ d! q) n/ P- G3 {#include <math.h>
- J6 f. u; V( F# Q2 T( c7 Y//矩阵复制+ \& m) L+ }( T8 E7 [
void Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])) _# A6 x/ ?" x# E5 Q: X5 K+ N
{
2 @' d( c$ n) ^4 `! _        int i,j;  P+ N( J! B; J; B2 g0 A8 }* _$ m' {
  k4 K* u3 @, |8 U7 ]( [# l
        for(i=0;i<4;i++)
- n* b1 r9 o% f                for(j=0;j<4;j++)
" D& W8 _. L4 u* b' u                        to_mtx[i][j]=from_mtx[i][j];& `) v7 o" k+ p. {& _' Y8 s7 q- K/ D
}* s. F3 W0 E, P( o  [9 y9 O8 t7 |$ V6 W
//矩阵初始化
  e' t. `, x( Y, Y# Tvoid Project_Matrix_Identity(double mtx[4][4])
7 O7 q' Y9 ]* H+ q+ J7 e% a+ I{
% I( C' B6 m. \5 u# B6 G/ m2 r        int i,j;2 k- q) |1 M5 W# F7 R0 D5 A) z! G( c
       
. _- }/ ^$ G+ [/ z        for(i=0;i<4;i++)
# e' H( p2 t7 R, H. O                for(j=0;j<4;j++)
: K! w1 ~$ e  m) r                        if(i==j)
9 a& U) E- f, E) B$ E                                mtx[i][j]=1.0;
6 l# \) s+ ^0 K- L1 I5 D% |                        else: g1 h; T% W) c
                                mtx[i][j]=0.0;
, K8 a/ Y. ?# P& E) ~$ b}+ X' p" U' ^) ~) L
//矩阵相乘! k3 _+ ?' P( u7 @* D, y) M
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])6 r9 \: h+ A8 }' d4 B3 J
{
6 y% I  ?' `& l& E* ^& b5 \2 S7 q  t
        int i,j,k;, E) e# t7 l- j! ?6 \8 F/ @
        double left[4][4],right[4][4];
8 F& Y0 C9 c0 F# ~! e! C( |- w  Q) n
        Project_Matrix_Copy(left_mtx,left);
' I$ \% J" ~" G/ Y        Project_Matrix_Copy(right_mtx,right);: @1 U: ^$ r/ ], C7 Z, j/ G0 G
        for(i=0;i<4;i++)& ?2 ~# k  n! q9 v  n  w. S
                for(j=0;j<4;j++)$ X: ?2 E& s3 U  d$ N; B2 }$ T3 {
                {
0 E8 R3 S: g6 [: z" s" @                        get_mtx[i][j]=0.0;- H3 H$ B' ~7 x8 R8 k
                        for(k=0;k<4;k++)  a7 K" `9 r5 T9 l% c4 C  F9 n1 b
                                get_mtx[i][j]+=left[i][k]*right[k][j];" C/ G; j2 e6 C: S& i0 G
                }
& G3 B' F: _$ R# h/ k; a0 e}
4 p4 K0 z9 \  N/ A% X3 Y/ ~/ x//转置矩阵
4 `+ R6 D9 X. N" C% U# Z+ [void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
, f! r& {8 B9 v) K- X& k; e{
7 x9 t& x* l- o  t0 q& H        int i,j;) F2 P9 P- |# P& K# J, H
        for(i=0;i<4;i++)
9 C! l9 b$ T9 ^1 v        {
) A" t8 W9 U  ~$ a2 l                for(j=0;j<4;j++). L' V& {# \% ]. U# O* M! _
                {& i, Y0 M) k0 j- X* d
                        transpose_mtx[i][j]=mtx[j][i];8 K: t9 C& _# J6 o( Q" n
                }
1 i/ a7 T& r# c. j& M8 e$ s' e        }- D4 ]9 o9 U/ p0 @0 H1 b
}
+ n; b; Q0 [; [+ c1 V//从11元组获取变换矩阵0 J/ H+ C# J1 k3 E! R3 ?+ \
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])
# A. a; [+ ^  k5 Y* L{& ~0 W% Y7 a1 O  ?9 b
, q$ E: Z+ m& ~6 w* h6 p
        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);
# y' w; @' B0 j5 }% U9 l6 E        int i,j;
! X( j9 k/ Y, x; B        for(i=0;i<4;i++)
6 g7 C9 l6 @! w        for(j=0;j<4;j++)7 T& X8 k. L( D0 f" B! k  M  G
                if(i==j)
/ [/ `5 I3 T5 s. q3 K6 f8 F                        pos[i][j]=1.0;2 B; l# k3 ?& e+ A" L
                else' O  c+ R; u4 M! g% X
                        pos[i][j]=0.0;
! v* j2 a2 N' p- r( q2 o6 d        pos[3][0]+=translation[0];
- }1 G+ _$ A4 o4 Z% [: t" [. C        pos[3][1]+=translation[1];
) h+ Y0 @; x4 w* v. ?        pos[3][2]+=translation[2];
% }5 v) ]9 |1 a* j0 |* v# h$ x}
# i; a* `2 a0 Q" E: Q& {4 ^. G//向量缩放% a8 A1 u  k0 A  S
void Project_Vector_Scale(double a[3],double scale,double b[3])
  M  R' o% q1 `2 X. y/ Z7 c/ ~{1 I/ W1 }- z8 J6 c
        b[0]=a[0]*scale;( F& C$ w7 ^1 E% N5 F
        b[1]=a[1]*scale;
' w. I  c" x2 `/ ]' E. N7 {  k        b[2]=a[2]*scale;9 ~$ ^+ v  c( \
}
9 v' ^: o5 N* k8 t  s( u% d+ g* T9 J# z- j* Y& s
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了