判断点是否在不规则区域范围内

发布了一个帖子向坛友请教,整理如下

1原帖

http://topic.csdn.net/u/20110711/13/01cb1ff3-162c-4e5a-8220-4be89964f1b7.html

2方法

方法①
可以先将你的不规则图形转换为区域(Region),然后可以用函数PtInRegion来判断。

CreatePolygonRgn()
PtInRegion()

方法②
开一个内存CDC,把你的不规则区域用一种颜色填充,其它的用另一种颜色填充。然后判断这点是什么颜色,就可以确定是在区域内或外了。 
多个区域同理。
先将区域填充颜色在判断颜色来判断是否在区域内部,
gr.FillPolygon(blueBrush, points, Drawing.Drawing2D.FillMode.Winding)

方法③
射线法

bool CBView::isPtInRegion(CBPoint testPt, CBPath* pPath)
{
	double dPtx = testPt.x;
	double dPty = testPt.y;
	CBObList* pSegList = pPath->getSegmentList();
	CBPoint endPt = pPath->getEndPt();
	int iNum = pPath->getSegmentCount();
	bool bOddNodes = false;
	for (POSITION pos = pSegList->GetHeadPosition(); pos != NULL;)
	{
		CBSegment* pCurrSeg = (CBSegment* )pSegList->GetNext(pos);
		CBSplineTo seg;

		CBPoint currPt = pCurrSeg->getEndPt();
		if ((currPt.y < dPty && endPt.y >= dPty) 
			|| (endPt.y < dPty && currPt.y >= dPty)
			&& (currPt.x <= dPtx || endPt.x <= dPtx))
		{
			if (currPt.x + (dPty - currPt.y) / (endPt.y - currPt.y) * (endPt.x - currPt.x) <dPtx)
			{
				bOddNodes = !bOddNodes;
			}
		}
		endPt = currPt;
	}	
	return bOddNodes;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值