本文主要针对ug二次开发是的矢量进行说明和举例,并附有代码和运行图片,程序代码链接:
https://download.csdn.net/download/weixin_47753171/87847292
uf_vec矢量
uf_vec.h
1、UF_VEC3_add求加
2、UF_VEC3_affine_comb矢量仿射
3、UF_VEC3_angle_between求两个向量之间的角度
4、UF_VEC3_ask_perpendicular返回一个垂直于输入向量的3D向量
5、UF_VEC3_convex_comb获得向量上点的坐标
6、UF_VEC3_copy 三维向量的复制
7、UF_VEC3_cross 叉乘
8、UF_VEC3_distance 两点之间的距离
9、UF_VEC3_distance_to_plane 点到面的距离
10、UF_VEC3_dot 点乘
11、UF_VEC3_is_equal 判断给定的向量在一定的公差内是否相等
12、UF_VEC3_is_parallel 判断是否平行
13、UF_VEC3_is_perpendicular 判断是否垂直
14、UF_VEC3_is_zero//判断是否为零向量
15、UF_VEC3_linear_comb等比缩放
16、UF_VEC3_mag求一个向量的实际大小
17、UF_VEC3_midpt 求向量中点的坐标
18、UF_VEC3_negate 反向量
19、UF_VEC3_scale 向量缩放
20、UF_VEC3_sub向量求差
21、UF_VEC3_triple点乘叉乘复合运算
22、UF_VEC3_unitize标准单位化
23、UF_VEC3_vec2三维转二维 UF_VEC3_vec4三维转四维
UF_initialize();
//矢量和
/*
double vectorAB[3] = { 7.0,1.0,0.0 };
double vectorAC[3] = { 5.0,3.0,0.0 };
double vectorAD[3];
UF_VEC3_add(vectorAB, vectorAC, vectorAD);
char msg[1000];
sprintf(msg, "%f %f %f", vectorAD[0], vectorAD[1], vectorAD[2]);
uc1601(msg, 1);//12,4,0
*/
/*
//求线上点的坐标
double x = 0.5; //计算点的参数这里选择中点pnt_on_seg = (parameter pnt1) + ((1.0 - parameter) pnt2).
double point1[3] = { 0.0,0.0,0.0 };
double point2[3] = { 10.0,5.0,0.0 };
double point3[3];
UF_VEC3_convex_comb(x, point1, point2, point3);
char msg[1000];
sprintf(msg, "%f %f %f", point3[0], point3[1], point3[2]);
uc1601(msg, 1);
*/
//利用向量叉乘(cross)求出点到直线的距离,已知A(3,4,0) B(10,6,0) C(8,3,0)求C点到AB的距离
//定义A,B,C三个点
double A[3] = { 3.0,4.0,0.0 };
double B[3] = { 10.0,6.0,0.0 };
double C[3] = { 8.0,3.0,0.0 };
//定义向量
double vectorAB[3] = { 7.0,2.0,0.0 };
double vectorAC[3] = {5.0,-1.0,0.0 };
double out_vector[3];
UF_VEC3_cross(vectorAB, vectorAC, out_vector);
//out_vector可以用绝对值表示方法二(不建议使用)
double a=fabs(out_vector[2]); //返回双精度参数x的绝对值
//转化数据类型
char msg1[256];
sprintf(msg1, "%f", a);
uc1601(msg1, 1);
/*
方法一
//求距离也相当于求叉乘结果,即平行四边形面积
double distance;
UF_VEC3_distance_to_plane(out_vector, A, out_vector, 0.001, &distance);
*/
//求AB之间的距离
double distanceAB;
UF_VEC3_distance(A, B, &distanceAB);
//转化数据类型
char msg[256];
//sprintf(msg, "%f", distance / distanceAB);///方法一中
sprintf(msg, "%f", a / distanceAB);///方法二中
//打印距离
uc1601(msg, 1);
UF_terminate();
矢量和运行结果
获得直线上任意点的坐标,本次验证的是中点
计算点到直线的距离
方法一:
方法二: