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

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

[复制链接]

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

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

admin 楼主

2014-8-25 15:14:54

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

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

x
1 c* y: i, e9 a  x0 ~5 P' A0 w7 l

% g6 }8 M7 D# k1 q- p% |$ E, H1 o- h# D0 X  W% i) I
#include <math.h> : H5 p6 ~( P" _
//矩阵复制
8 Q- W% s( j9 L1 Q, Fvoid Project_Matrix_Copy(double from_mtx[4][4], double to_mtx[4][4])
* n% ~6 v9 ~( x" L. t4 y2 `{
0 e1 h1 O8 W" I  h2 y        int i,j;
3 Q) V+ n' L+ ], Z' ~
% y7 M: i& O6 x        for(i=0;i<4;i++)
0 P. T* J. B+ x' {) p  f! @% r                for(j=0;j<4;j++)  q$ k% O8 C) j- D3 B( E5 O
                        to_mtx[i][j]=from_mtx[i][j];1 g( I* l5 d: w4 Y. e# ^/ X; ?
}0 ?" B4 ]* A3 X6 p$ A/ B
//矩阵初始化. Y2 t* R: t# N
void Project_Matrix_Identity(double mtx[4][4])+ _5 }$ P% N% N6 [$ d6 S
{
! p, [( J! B+ R) ~  i, [        int i,j;
0 Z! O8 u1 p3 p& m6 Q$ g7 w) j* O# p        ; e8 p% B. |. B$ a# P( |
        for(i=0;i<4;i++)3 c6 |4 P$ x. `) c3 l, p4 D
                for(j=0;j<4;j++)
* g5 Z. |/ G8 u# l& q% C7 Y$ @) r0 q8 w                        if(i==j)* J& I4 ?0 h( [" J' R5 n
                                mtx[i][j]=1.0;3 S2 N$ I0 Z' _% M5 z  D
                        else
2 l3 B7 q* }. @4 ^" y$ S3 `7 Q                                mtx[i][j]=0.0;% |  E4 g6 |/ E' ]" j. p
}% s) P& g- u9 o" ]( D, j
//矩阵相乘$ \! T' `5 ?$ I# M7 d) \% N2 f
void Project_Matrix_Product(double left_mtx[4][4],double right_mtx[4][4],double get_mtx[4][4])9 {2 E9 u- u4 V8 f5 d) r
{4 _4 {' E; \+ @9 `
* V" {3 C% \! S) v& d# l+ g2 r
        int i,j,k;4 C. e! G7 J& l' B8 t" d
        double left[4][4],right[4][4];
% M9 @0 I6 c* u; v. i  @. \8 U
: z' ?9 Q6 _. S* K        Project_Matrix_Copy(left_mtx,left);
0 Q, T8 r. h: ]' b  A: A% H# c( |        Project_Matrix_Copy(right_mtx,right);
' ]1 H1 i4 L# g: m        for(i=0;i<4;i++)$ g! \0 i; W; A  a. k0 y2 E
                for(j=0;j<4;j++)' i& I" V! l! e  V. Z9 L5 b% M
                {) n  F! F/ t: ]  L4 U. Y
                        get_mtx[i][j]=0.0;# R8 ?$ _* E, `. u; |+ v
                        for(k=0;k<4;k++)
: Q4 Q4 u9 ^% C                                get_mtx[i][j]+=left[i][k]*right[k][j];
- P6 W3 g8 t; U! s8 r                }
2 ?' L, x; X( ?$ d! B! \( o}
+ q8 m  [4 f3 v  u4 _& c) p0 I//转置矩阵3 f1 |, o; [) u6 c. \8 w0 n0 |
void Project_MatrixGet_Transpose(double mtx[4][4],double transpose_mtx[4][4])
* a- ?/ x' _5 o7 X2 S- d2 H{9 I# i( w# ]8 l' p
        int i,j;
3 p# E$ ~4 t9 H2 v        for(i=0;i<4;i++)  e' Q3 u9 q. V% C* w' Z- J
        {) W9 O9 f7 R7 k: u% [9 J* p; D4 @& L6 ^
                for(j=0;j<4;j++)
# F, J, z+ X7 `, b4 B4 I                {
' G( S* X" g* e7 k                        transpose_mtx[i][j]=mtx[j][i];
# q: S) A7 X. P" u5 T& ^4 L* X9 I                }/ C& ]* N8 R* E' X
        }& e  H, N3 J6 q- `6 g: z
}7 B) J: h5 t* U( U" L8 a
//从11元组获取变换矩阵& p8 e5 z, n* y$ a7 L
void Project_Matrix_Get_From_Move(double translation[3],double point[3],double rotation[3],double angle,double pos[4][4])& e2 x8 e+ |, z* |9 }1 }% R- ^
{
/ k5 f; a, M: P. B: J0 M4 R( i
' W+ y' I$ Q! c        //Project_Matrix_Get_Rotation(rotation,point,angle,pos);* E& S' k: n# O7 h
        int i,j;( g% C; n# v4 N1 r
        for(i=0;i<4;i++)
6 u# ^" u1 H, y/ |        for(j=0;j<4;j++), U2 G6 u. D1 g; k8 G
                if(i==j)% @+ h6 [6 w* q- Y
                        pos[i][j]=1.0;
& C$ o6 I. W) [9 }! |1 R                else
+ Y  s( d$ p! |  ]2 d* W9 q. G                        pos[i][j]=0.0;
2 ^9 ]: q& o# O" Z# a        pos[3][0]+=translation[0];
* }% y/ d& G8 z3 [        pos[3][1]+=translation[1];
( T+ V; \) u1 Z* s5 V        pos[3][2]+=translation[2];
6 Y% Q! H; V! D# U+ Z1 U' x}
* q! ?) ]! z3 G; z$ l9 g8 i//向量缩放! Y+ u( j4 A1 z6 z  X7 L
void Project_Vector_Scale(double a[3],double scale,double b[3])& e# V' s: E5 j% B0 X) g5 k% k' H4 S
{  {; J- B! F; v3 V; f/ A# A5 P
        b[0]=a[0]*scale;; F/ ?( `. U0 Y; K, S0 G6 [
        b[1]=a[1]*scale;
% Y, y6 S* }0 c4 _' d3 g8 ^# p        b[2]=a[2]*scale;
3 r/ \- K) r  A- T}
* Q% z) H' ~" X, p$ o; I% y5 @! e0 P: E  K# W# j1 k) x0 |' N% X* U
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了