点在区域内的判断

BOOL PointIsInPolygon(AcGePoint3d pt, AcGePoint3dArray ptArr)
{
	int ptNum, i, interNum;
	AcGePoint3d ptA, ptB;
	ads_point pt0, pt1, pt2, ptIns, ptX;

	interNum = 0;
	pt0[X] = 0.0;
	pt0[Y] = 0.0;
	pt0[Z] = 0.0;
	ptX[X] = pt.x;
	ptX[Y] = pt.y;
	ptX[Z] = pt.z;
	ptNum = ptArr.length();
	for (i = 0;i < ptNum - 1;i++) {
		ptA = ptArr.at(i);
		ptB = ptArr.at(i + 1);
		pt1[X] = ptA.x;
		pt1[Y] = ptA.y;
		pt1[Z] = 0.0;
		pt2[X] = ptB.x;
		pt2[Y] = ptB.y;
		pt2[Z] = 0.0;
		if(acdbInters(ptX, pt0, pt1, pt2, 1, ptIns) == RTNORM) {
			interNum++;
		}
	}
	if (interNum % 2 == 0) {
		return false;
	}
	else {
		return true;
	}
}

此函数可判断一个点是否在一个点组围城的区域内。

采用的方式是用点做水平射线,然后计算和射线和点组的边的交点个数,奇书在内部,偶数在外部,这是一个定理。

注意:这个定理计算时不能有弧形,弧形可以拟合下再计算,一般情况下区别不大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农709

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值