/* 原理: 将测试点的Y坐标与多边形的每一个点进行比较,
** 会得到测试点所在的行与多边形边的所有交点。
** 如果测试点的两边点的个数都是奇数个,
** 则该测试点在多边形内,否则在多边形外。 */
#include <stdio.h>
#include <iostream>
/* 函数功能: 判断点(x, y)是否在有ploy_sides个顶点的多边形内 */
/* 参数: poly_sides 测试多边形的顶点数
** poly_x 测试多边形的各个顶点的X轴坐标
** poly_y 测试多边形的各个顶点的Y轴坐标
** x 测试点的X轴坐标
** Y 测试点的Y轴坐标 */
/* 返回值: 返回0 表示不在多边形内部,返回1 表示在多边形内部 */
/* 说明: 在多边形各边上的点默认不在多边形内部 */
int inOrNot(int poly_sides, float *poly_X, float *poly_Y, float x, float y)
{
int i, j;
j = poly_sides - ;
int res = ;
for (i = ; i<poly_sides; i++)
{
//对每一条边进行遍历,该边的两个端点,有一个必须在待检测点(x,y)的左边,且两个点中,有一个点的y左边比p.y小,另一个点的y比p.y大。
if ((poly_Y[i]<y && poly_Y[j] >= y || poly_Y[j]<y && poly_Y[i] >= y) && (poly_X[i] <= x || poly_X[j] <= x))
{
//用水平的直线与该边相交,求交点的x坐标。
res ^= ((poly_X[i] + (y - poly_Y[i]) / (poly_Y[j] - poly_Y[i])*(poly_X[j] - poly_X[i])) < x);
}
j = i;
}
return res;
} int main(void)
{
int poly_sides = ; // 多边形顶点数
float poly_X[] = { , , , , }; // 多边形各顶点的X轴坐标
float poly_Y[] = { , , , , }; // 多边形各顶点的Y轴坐标
float x = ; // 测试点的X轴坐标
float y = ; // 测试点的Y轴坐标
int ret;
ret = inOrNot(poly_sides, poly_X, poly_Y, x, y);
if ( == ret)
{
printf("the point (%f, %f), in the poly\n", x, y);
}
else
{
printf("the point (%f, %f), not in the poly\n", x, y);
}
system("pause");
return ;
}

判断一个点在多边形的内部C++的更多相关文章

  1. 【转载】matlab如何判断一个点是否在多面体内

    转载自:http://www.52souji.net/point-within-a-polyhedron/ 我遇到的一个实际问题是:要在空位区域随机放置一定数量的原子,这些原子在空位区域任何一处存在的 ...

  2. 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部

    判断一点是否在不规则图像的内部算法,如下图是由一个个点组成的不规则图像,判断某一点是否在不规则矩形内部,先上效果图 算法实现如下,算法简单,亲试有效 public class PositionAlgo ...

  3. [算法]Python判断一个点是否在多边形内部

    题目: 代码: # -*- coding:utf-8 -*- def rayCasting(p, poly): px = p['x'] py = p['y'] flag = False i = 0 l ...

  4. PNPoly算法代码例子,判断一个点是否在多边形里面

    写C语言的实验用到的一个算法,判断一个点是否在多边形的内部.C的代码如下: int pnpoly(int nvert, float *vertx, float *verty, float testx, ...

  5. HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内

    LINK:Cupid's Arrow 前置函数 atan2 返回一个向量的幅角.范围为[Pi,-Pi) 值得注意的是 返回的是 相对于x轴正半轴的辐角. 而判断一个点是否在一个多边形内 通常有三种方法 ...

  6. Mysql中判断一个点是否落在多边形内

    关于地理空间数据,经常需要处理两个空间数据的关联关系.有很多种方法可以处理,通过编写程序算法,或者是调用数据库中对应的function.在mysql数据库中,https://dev.mysql.com ...

  7. js 判断一个点是否在一个多边形之内

    出处: https://github.com/substack/point-in-polygon/blob/master/index.js github: https://github.com/sub ...

  8. java 坐标系运算 判断一个地理坐标是否在电子围栏 圆、矩形、多边形区域内

    转载自:https://blog.csdn.net/Deepak192/article/details/79402694 测试没问题,我用的是原始坐标:要注意的是坐标转换问题,要看当前是属于什么坐标系 ...

  9. PHP 判断点是否在多边形内

    如何判断一个点是否在一个多边形内,何时会用到这个场景. 我们就模拟一个真是场景.我们公司是快递公司,在本地区域有6个分点.每个分点有3-5个工人负责附近的快递派遣发送,所以根据每个点的服务区域我们就能 ...

随机推荐

  1. STM32之独立看门狗(IWDG)与窗口看门狗(WWDG)总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  2. Python3基础 list range+for 等差数列

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. Django框架(九) Django之ORM常用字段和参数

    ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范 ...

  4. linux内核中侧async_tx是什么?

    答: 异步内存传输api(asynchronous memory transfer/transform API),这是一种api,用来为应用提供操作DMA的API. 下图是async_tx在架构中所处 ...

  5. extjs的使用笔记2

    系统的大部分资源(安装程序的除bin, lib, conf等之外的东西)都是放在 /usr/share/目录中的 在用户自己定义的, 一些关于系统资源的东西, 则放在目录 ~/.local/share ...

  6. expr的字符串操作 表达式: length, index, match, substr等

    参考: http://www.linuxidc.com/Linux/2012-04/58095.htm expr的格式, 主要有两个, 一是 用expr option, 选项: 二是, expr的几个 ...

  7. HDU 6191 Query on A Tree(可持久化Trie)

    题意 \(n\) 个点的有根树,根为 \(1\) .每个点有点权,有 \(q\) 个询问,每次询问以 \(u\) 为根的子树的点的点权中异或 \(x\) 所得的最大值是多少. 思路 求出整棵树的 \( ...

  8. 【Hadoop 分布式部署 九:分布式协作框架Zookeeper架构 分布式安装部署 】

    1.首先将运行在本地上的  zookeeper 给停止掉 2.到/opt/softwares 目录下  将  zookeeper解压到  /opt/app 目录下 命令:  tar -zxvf zoo ...

  9. communication

    Always consider the challenge as a chance. Basic principles: Know your audience. Know your purpose. ...

  10. 17秋 SDN课程 第一次上机作业

    第一题 拓扑: 测试连通性: 第二题 拓扑: 测试连通性: 第三题 拓扑: 测试连通性: