判断点是否在多边形内(C++)

原创 2014年01月27日 15:51:01
/********************************/
// 参数:
// x: 点的x坐标
// y: 点的y坐标
// vertex: 多边形顶点组(顺时针或逆时针顺序)
// num: 多边形顶点数
//
// return: 点是否在多边形内
/*******************************/

bool IsInPolygon(float x, float y, float vertex[][2], int num)
{
    if( num < 3 )
        return false;

    int count = 0;
    for (int i = 0; i < num; i++)
    {
        float p1[2] = { vertex[i][0], vertex[i][1] };
        float p2[2] = { vertex[(i+1) % num][0], vertex[(i+1) % num][1] };

        if( p2[1] == p1[1])
            continue;

        if( y < p2[1] && y < p1[1])
            continue;

        if( y > p2[1] && y > p1[1])
            continue;

        float xx = (y - p1[1]) * ( p2[0] - p1[0]) / (p2[1] - p1[1]) + p1[0];

        if( xx >= x )
            count++;
    }
    
    return (count % 2 == 1);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++ 点在多边形内算法——判断一个点是否在一个复杂多边形的内部

转自:http://blog.csdn.net/hjh2005/article/details/9246967 新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多边形...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

如何判断一个点是否在多边形内?

在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题。乍听起来还挺复杂。根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++重载复合赋值运算符、算术运算符和关系运算符

原文链接:http://blog.csdn.net/lyh__521/article/details/49622601复合赋值运算符  形如‘*=’、‘+=’、‘/=’等这样的运算符称为复合赋值运算符...

C++重载运算符函数需知

原文链接:http://blog.csdn.net/lyh__521/article/details/49592975基本概念 重载的运算符是具有特殊名字的函数: (1) 名字由关键字 op...

判断一个点是否在多边形内 C++

1. 叉乘判别法(只适用于凸多边形) 想象一个凸多边形,其每一个边都将整个2D屏幕划分成为左右两边,连接每一边的第一个端点和要测试的点得到一个矢量v,将两个2维矢量扩展成3维的,然后将该边与v叉...

判断点是否在二维多边形中

  • 2017年07月21日 17:02
  • 45.38MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断点是否在多边形内(C++)
举报原因:
原因补充:

(最多只允许输入30个字)