news 2026/9/29 20:35:57

UG\NX二次开发,根据对称面计算对称向量对称点的方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UG\NX二次开发,根据对称面计算对称向量对称点的方法
// 对称变换函数 (输入向量vin, 平面法向n, 输出向量vout) void reflectVector(const double vin[3], const double n[3], double vout[3]) { double mag; UF_VEC3_unitize(n, 0.01, &mag, (double*)n); double dot = 0.0; UF_VEC3_dot(vin, n, &dot); double temp[3]; UF_VEC3_scale(2 * dot, n, temp); UF_VEC3_sub(vin, temp, vout); // vout = vin - 2*(vin·n)*n }

下面函数可以输入体的面还有选择的指定镜像面

//计算两个对象的最近点 double CalculatingDistance(tag_t face, tag_t point,double MinPoint[3]) { if (face == NULL_TAG || point == NULL_TAG) { return 1000; } double min_dist1 = 1000; double pt_on_obj1[3] = { 0.0 }; double pt_on_obj2[3] = { 0.0 }; double accuracy = 0.0; UF_CALL(UF_MODL_ask_minimum_dist_2(face, point, 0, NULL, 0, NULL, &min_dist1, pt_on_obj1, pt_on_obj2, &accuracy)); MinPoint[0] = pt_on_obj1[0]; MinPoint[1] = pt_on_obj1[1]; MinPoint[2] = pt_on_obj1[2]; return min_dist1; } //计算对称点 void SymmetryPoint(double point[3], tag_t face, double moved_point[3],double vec[3]) { tag_t tempPoint = CreatePoint(point); CalculatingDistance(face, tempPoint, moved_point); UF_OBJ_delete_object(tempPoint); UF_VEC3_sub(moved_point, point, vec); UF_VEC3_add(moved_point, vec, moved_point); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!