/* 原理: 将测试点的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 - 1;int res = 0;for (i = 0; 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 = 5;    // 多边形顶点数float poly_X[5] = { 1, 1, 3, 4, 3 };    // 多边形各顶点的X轴坐标float poly_Y[5] = { 1, 2, 3, 2, 1 };    // 多边形各顶点的Y轴坐标float x = 399;    // 测试点的X轴坐标float y = 2; // 测试点的Y轴坐标int ret;ret = inOrNot(poly_sides, poly_X, poly_Y, x, y);if (1 == 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 0;
}

判断某点在多边形内——方法二相关推荐

  1. 判断点是否处于多边形内的三种方法(转)

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

  2. 如何判断一个点在多边形内

    一.从三角形开始说起---怎么判断一个点在三角形内 三角形是最简单的多边形了.先说说三角形有哪些判断方法. 参考自:判断一个点是否在三角形内部 - 知乎 几种方法判断平面点在三角形内_独L无二的博客- ...

  3. 射线法判断点是否在多边形内-JAVA

    1.定义点 public class Point {private BigDecimal x;private BigDecimal y;public Point() {};@Overridepubli ...

  4. 判断点是否位于多边形内(包含凹多边形)

    如果判断点是否在凸多边形内,则有多种方法,方法简单,计算速度也快,直接使用物理引擎做判断也行 但实际问题中遇到的多边形不一定是凸多边形,它可能是凹边行或者复合多边形判断一个点在多边形内或多边形外,射线 ...

  5. python射线法判断点是否在多边形内

    python3射线法判断点是否在多边形内 射线法 首先我们要先理解什么是射线法.射线法的意思是:在随机点上做一条平行于x轴的射线,方向是x轴正方向,看这条射线与多边形区域的交点个数,如果是偶数,那么这 ...

  6. 判断一点是否在多边形内(附Java实现代码)

    引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数射线法 时间复杂度:O(n) 适用范围:任意多边形 个人认为是非常不错的算法(不需考虑精度误差和多边形点给出的顺序),可以作为第一选择 ...

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

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

  8. 判断某点在多边形内——方法一

    算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目.如果有 ...

  9. python 判断点在随机多边形内_初中数学必须掌握的28个考点及60个易错点,收藏起来慢慢看!...

    中学大课堂初中各科学习必备(海量学习资源)关注 来源:初中生学习(ID:czsxuexige) 初中的学习不同于小学,在初中数学学习中,由于数学知识点难度的提升,更为看中的是孩子们的数学逻辑思维能力, ...

最新文章

  1. cas sso单点登录 登录过程和登出过程原理说明
  2. ng-init,ng-controller,ng-model
  3. 计算机网络学习笔记(17. 计算机网络作业一)
  4. Mysql体系结构及sql执行过程总结
  5. 我的javascript学习笔记之数据类型
  6. geforce下载旧版驱动_如何在没有GeForce经验的情况下下载NVIDIA驱动程序
  7. 【菜鸟必看】CSDN博客字体颜色编码大全,前端颜色编码,都在这里了!!
  8. [译]无迹卡尔曼滤波教程
  9. 【STM32H7教程】第24章 STM32H7的Cache解读(非常重要)
  10. 王选院士谈院士增选:院士未必总是学术权威
  11. SAP 查找生产订单发料成本中心 逻辑
  12. GIS行业应用|智慧城市系列之智慧市政03
  13. 区块链下的保护个人信息安全武器
  14. dbconfig设置mysql_dbconfig配置 | 学步园
  15. 通达信程序接口SMII是什么?
  16. 计算机速录专业论文,试论现代汉语拼音在计算机速录技术中的应用
  17. 【Python】Python 中sqrt函数求负数的平方根
  18. Python实现输入三个整数x,y,z,请把这三个数由小到大输出
  19. 构建高效的整车系统级别评估平台,百度安全自动驾驶风险安全研究亮相NDSS2022AutoSec...
  20. 【C#上位机必看】你们要的Iot物联网项目来了

热门文章

  1. 5号字对应的数字字号_写好公文的几个数字口诀
  2. FPGA实现VGA显示(三)——————单个字符显示
  3. Struts2简单入门实例
  4. antd如何获取表单的值_JavaScript多个表单序列化获取值
  5. 关于linux低端内存
  6. 常用的 iptables配置脚本
  7. 考研复习(2)链表操作
  8. 微型计算机原理DL,微型计算机原理练习附解答.doc
  9. 网管师职业认证网上辅导班开课前的调查
  10. ContentServer迁移的几个步骤