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

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

[复制链接]

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

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

admin 楼主

2014-8-25 15:14:54

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

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

x
& W+ U  C' G* x0 o0 z! ?# c8 Q6 K

" d6 u. S3 `6 u/ {6 S4 a
. u6 }/ r& I9 [  w% t: N% d#include <math.h> 5 ]6 r, ?. P$ ]% x
//矩阵复制
; {( w$ @( {' v2 d  r+ Evoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])- d% O* H# n' Z' n) w
{. Y% B! K! T* v! ?/ u4 T8 I
        int i,j;- Z$ M( t- Y. k$ h& q1 ^" T0 H

+ Q. j: ]* x" v4 L0 V& _+ N' C        for(i=0;i<4;i++)6 K' c: z2 t1 b" T0 r
                for(j=0;j<4;j++)
+ ]0 S" {  A# M4 x* a  z                        to_mtx[i][j]=from_mtx[i][j];) ]3 Y/ l  Z6 }5 \! H6 K
}
' c( A2 c2 `; Y. u7 x! P5 O5 ]//矩阵初始化
$ I3 ?) S5 l" X$ w# `+ ]void Project_Matrix_Identity(double mtx[4][4])
2 ?6 [# I) B) R7 [" X{2 X$ \) C# m, `  n$ y# a' X
        int i,j;
( u: S; w. m/ z! Z+ K  ~* Y       
/ F' ^, ]& ]  s. X2 I  ~        for(i=0;i<4;i++), d- P! A- q: b* J6 F2 I0 I- x
                for(j=0;j<4;j++)- Q- u# @' a" N5 S( L0 N1 f
                        if(i==j)+ T$ U* x0 O% [
                                mtx[i][j]=1.0;
* E% \( i$ l4 v2 P% |4 ]$ ]                        else# t6 B0 n9 l+ x5 |- w# o6 H0 s( g
                                mtx[i][j]=0.0;5 l# m' M; ~6 A
}7 a0 P( o* K1 K- V
//矩阵相乘
5 _8 D) w/ L+ n+ G. kvoid Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4]); b& q; W# \8 A8 `
{% Z5 ]2 e; B' @! S' M

7 I; e2 y/ j( V6 q        int i,j,k;
( s. [7 b& I" M& U3 W% n1 g        double left[4][4],right[4][4];
8 C& }. y: m0 q- q, C! n6 `% M! @
" U7 M, V9 E. R# {! b0 V1 x9 y- v- s        Project_Matrix_Copy(left_mtx,left);6 B! o# D- i, c9 q0 {* {
        Project_Matrix_Copy(right_mtx,right);
/ \% x& _) N& @' P& f        for(i=0;i<4;i++)# q7 v1 S9 U$ a! S6 F
                for(j=0;j<4;j++)
( G7 q- A/ u2 v% Y9 v2 v                {
" e( t! Z0 k  P+ R                        get_mtx[i][j]=0.0;& a& \. y* t, Z9 R$ T
                        for(k=0;k<4;k++)+ q; p# L1 {" p- _# g- v) Z& d
                                get_mtx[i][j]+=left[i][k]*right[k][j];
1 b3 r/ \: z6 k& e/ U- z/ r                }6 O: M, F3 m2 B  h' Z
}
8 L$ I: ~( [7 N2 O- M//转置矩阵
% A: z+ R& z* `8 K  u! c$ dvoid Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
+ m" X# }: ?# Q0 Y{& M& Q. R7 C* ^
        int i,j;6 y5 j7 M( Q. J- U2 O) [7 M
        for(i=0;i<4;i++)$ w+ h# O$ x0 m0 ^5 q* H4 J
        {( [' N" v1 q8 M7 m0 k# p" x( f+ K
                for(j=0;j<4;j++)
2 I3 v+ |% I; h' p                {+ J- n/ g$ K1 @, D4 Q0 V* k' Z
                        transpose_mtx[i][j]=mtx[j][i];
' r( \; O. O, d/ w/ M: Z& K$ n                }
  U. ~* E! n5 u: s' W* |" T        }
1 I1 p2 d/ Z: G, j. P+ S4 n}' H& C+ A9 }# O" z" D
//从11元组获取变换矩阵0 }$ b2 t' B% j# X
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])3 A1 M- a+ x5 ]8 H( M) O
{; L: k7 j; Y0 j' R" o4 m
. z4 V: l) {+ s, f) x/ Z
        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);7 c$ S: `& B, ^* i/ C: e
        int i,j;
" v0 k# ]0 p, L        for(i=0;i<4;i++)) i% w9 F$ P7 E4 T8 l
        for(j=0;j<4;j++)
( J/ T5 S0 R2 ]/ w; B* H. V                if(i==j)
+ z  F9 x" i( i9 K) q1 a  K                        pos[i][j]=1.0;
6 J6 [8 R4 {" {9 K* J1 R                else, ^- ]3 F2 X8 p3 a
                        pos[i][j]=0.0;4 v5 E. [: I" U  u% X3 S' t
        pos[3][0]+=translation[0];
- j4 Z/ U3 D1 y/ h4 _        pos[3][1]+=translation[1];
. j  r4 L' ~$ `/ W        pos[3][2]+=translation[2];
  y& n4 Q: [' {  N, W6 t}
( |  v( R2 q' \//向量缩放
) \; a5 V  C. L# a& Uvoid Project_Vector_Scale(double a[3],double scale,double b[3])" E9 \; m, O& }6 h& T
{
9 S; n0 f  p/ x, {) A        b[0]=a[0]*scale;; u  C# N. W8 G6 q! \$ Z
        b[1]=a[1]*scale;0 `; @" S9 @$ t: j6 ]5 d" N
        b[2]=a[2]*scale;
6 @/ _( j  D' {: [1 D8 Q}
: ~$ b- v1 ^1 d4 |5 c% g! L6 j# @* D5 g" ~( Z* n$ l6 B1 \9 y7 M
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了