UG\NX二次开发 判断两个圆柱面是否共轴


void LiHai::GetFacePointAndDirection(tag_t face, double point[], double direction[])
{
	int type = 0;
	int norm_dir = 0;
	double box1[6];
	double radius;
	double rad_data;
	UF_MODL_ask_face_data(face, &type, point, direction, box1, &radius, &rad_data, &norm_dir);
}

double LiHai::GetTwoPointDistance(double startPoint[], double endPoint[]) 
{
		return std::sqrt(
			std::pow(endPoint[0] - startPoint[0], 2) +
			std::pow(endPoint[1] - startPoint[1], 2) +
			std::pow(endPoint[2] - startPoint[2], 2));
}

// 判断两个圆柱面是否共轴
bool LiHai::AreCylindersCoaxial(tag_t cylFace1, tag_t cylFace2)
{
	double point1[3];
	double direction1[3];
	LiHai::GetFacePointAndDirection(cylFace1, point1, direction1);

	double point2[3];
	double direction2[3];
	LiHai::GetFacePointAndDirection(cylFace2, point2, direction2);

	double tol = 1e-6; // 公差
	// 检查轴线方向是否平行
	if (fabs(direction1[0] - direction2[0]) > tol
		|| fabs(direction1[1] - direction2[1]) > tol
		|| fabs(direction1[2] - direction2[2]) > tol)//方向相同
	{
		if (fabs(direction1[0] + direction2[0]) > tol
			|| fabs(direction1[1] + direction2[1]) > tol
			|| fabs(direction1[2] + direction2[2]) > tol)//方向相反
		{
			return false; // 轴线不平行
		}
	}

	//圆柱面参考点重合
	double dis = LiHai::GetTwoPointDistance(point1, point2);
	if(dis < tol)
		return true;

	//两点方向,已归一化
	std::array<double, 3> vec = LiHai::GetTwoPointVec(point1, point2);//这个函数看下一篇博客 https://blog.csdn.net/WangPaiFeiXingYuan/article/details/142141635

	// 获取向量vec在向量referenceVector上的投影长度 https://lihai.blog.csdn.net/article/details/142138997
	double len = LiHai::GetProjectionLength(vec.data(), direction1);//这个函数看上一篇博客 
	if(abs(len-1.0) < tol)
		return true;
	else
		return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值