NX二次开发-向量乘矩阵的几何意义

函数:UF_MTX3_vec_multiply_t() 或者UF_MTX3_vec_multiply()。推荐使用UF_MTX3_vec_multiply_t() 

函数说明:将向量按照矩阵进行变换:绝对坐标系下有向量vec,矩阵tagMatrix直接用WCS坐标系的矩阵。vec与tagMatrix乘积得到vec_product。为了更直观我们使用UF_CURVE_create_line创建一条直线来看一下。

 

 

 结果:红色矢量为vec、绿色矢量为vec_product。红色向量与ABS坐标的相对位置 ,和绿色向量与tagMatrix矩阵坐标系(WCS)的位置是一致的。结论:使用UF_MTX3_vec_multiply_t()将矢量乘一个矩阵的几何意义就是将矢量与之前的坐标相对位置,转换为此矩阵坐标系下对应的位置。

 1 #include "Text.h"
 2 extern DllExport void ufsta(char *param, int *returnCode, int rlen)
 3 {
 4     UF_initialize();
 5     
 6     //获取WCS标识
 7     tag_t tagWCS = NULL_TAG;
 8     UF_CSYS_ask_wcs(&tagWCS);
 9 
10     //获取WCS的原点坐标和矩阵标
11     tag_t tagCsys;   //原点坐标
12     tag_t tagMatrix; //矩阵标识
13     double couCsysOrigin[3];
14     UF_CSYS_ask_csys_info(tagWCS, &tagMatrix, couCsysOrigin);
15     
16     //获取指定矩阵标识的矩阵值
17     double douMatrixValues[9];
18     UF_CSYS_ask_matrix_values(tagMatrix, douMatrixValues);
19 
20     double vec[3] = { 1,1,1 };
21     double startPoint[3] = { 0,0,0 };
22     UF_CURVE_line_t tLin;
23     tLin.start_point[0] = startPoint[0];
24     tLin.start_point[1] = startPoint[1];
25     tLin.start_point[2] = startPoint[2];
26     tLin.end_point[0] = vec[0];
27     tLin.end_point[1] = vec[1];
28     tLin.end_point[2] = vec[2];
29 
30     tag_t tagLine;
31     UF_CURVE_create_line(&tLin, &tagLine);
32 
33     double vec_product[3];
34     UF_MTX3_vec_multiply_t(vec, douMatrixValues, vec_product);//向量乘矩阵
35 
36     tLin.end_point[0] = vec_product[0];
37     tLin.end_point[1] = vec_product[1];
38     tLin.end_point[2] = vec_product[2];
39     UF_CURVE_create_line(&tLin, &tagLine);
40 
41     UF_terminate();
42 }
43 
44 extern int ufusr_ask_unload(void)
45 {
46     return (UF_UNLOAD_IMMEDIATELY);
47 }

 

posted @ 2020-03-23 10:04  王牌飞行员_里海  阅读(494)  评论(0编辑  收藏  举报