判断点在2D多边形内的一个算法

该算法是Graphics Gems里面提供的算法的改进,假定多边形是闭合的。 改进的地方是使用一个Point结构和STL使原算法看起来更加清晰。

经测试它可以用在任何多边形上,无论是凸多边形还是凹多边形。

此算法的问题是只能判断在多边形内,如果在点正好落在多边形边上或顶电上结果会不准确。如果需要判断在顶点或者边上,需要额外添加判断代码。


下面是C++源码:

#include <vector>
#include <iostream>

struct Point
{
	int x,y;
	Point(){ x = y = 0; }
	Point(int _x, int _y){ x = _x; y = _y; }
};

typedef std::vector<Point> Polygon;

bool PointInPoly( Point const &test, const Polygon &polygon)
{
	Point newPoint, oldPoint;
	Point left, right;
	bool inside = false;
	size_t points = polygon.size();

	if(points < 3)
		return false;
	oldPoint = polygon[points - 1];
	for(unsigned int i = 0; i<points; i++)
	{
		newPoint = polygon[i];
		if(newPoint.x > oldPoint.x)
		{
			left = oldPoint;
			right = newPoint;
		}
		else{
			left = newPoint;
			right = oldPoi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值