判断某点在多边形内——方法二
/* 原理: 将测试点的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. 叉乘判别法(只适用于凸多边形)想象一个凸多边形,其每一个边都将整个2D屏幕划分成为左右两边,连接每一边的第一个端点和要测试的点得到一个矢量v,将两个2维矢量扩展成3维的,然后将该边与v叉乘,判断 ...
- 如何判断一个点在多边形内
一.从三角形开始说起---怎么判断一个点在三角形内 三角形是最简单的多边形了.先说说三角形有哪些判断方法. 参考自:判断一个点是否在三角形内部 - 知乎 几种方法判断平面点在三角形内_独L无二的博客- ...
- 射线法判断点是否在多边形内-JAVA
1.定义点 public class Point {private BigDecimal x;private BigDecimal y;public Point() {};@Overridepubli ...
- 判断点是否位于多边形内(包含凹多边形)
如果判断点是否在凸多边形内,则有多种方法,方法简单,计算速度也快,直接使用物理引擎做判断也行 但实际问题中遇到的多边形不一定是凸多边形,它可能是凹边行或者复合多边形判断一个点在多边形内或多边形外,射线 ...
- python射线法判断点是否在多边形内
python3射线法判断点是否在多边形内 射线法 首先我们要先理解什么是射线法.射线法的意思是:在随机点上做一条平行于x轴的射线,方向是x轴正方向,看这条射线与多边形区域的交点个数,如果是偶数,那么这 ...
- 判断一点是否在多边形内(附Java实现代码)
引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数射线法 时间复杂度:O(n) 适用范围:任意多边形 个人认为是非常不错的算法(不需考虑精度误差和多边形点给出的顺序),可以作为第一选择 ...
- PHP 判断点是否在多边形内
如何判断一个点是否在一个多边形内,何时会用到这个场景. 我们就模拟一个真是场景.我们公司是快递公司,在本地区域有6个分点.每个分点有3-5个工人负责附近的快递派遣发送,所以根据每个点的服务区域我们就能 ...
- 判断某点在多边形内——方法一
算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目.如果有 ...
- python 判断点在随机多边形内_初中数学必须掌握的28个考点及60个易错点,收藏起来慢慢看!...
中学大课堂初中各科学习必备(海量学习资源)关注 来源:初中生学习(ID:czsxuexige) 初中的学习不同于小学,在初中数学学习中,由于数学知识点难度的提升,更为看中的是孩子们的数学逻辑思维能力, ...
最新文章
- cas sso单点登录 登录过程和登出过程原理说明
- ng-init,ng-controller,ng-model
- 计算机网络学习笔记(17. 计算机网络作业一)
- Mysql体系结构及sql执行过程总结
- 我的javascript学习笔记之数据类型
- geforce下载旧版驱动_如何在没有GeForce经验的情况下下载NVIDIA驱动程序
- 【菜鸟必看】CSDN博客字体颜色编码大全,前端颜色编码,都在这里了!!
- [译]无迹卡尔曼滤波教程
- 【STM32H7教程】第24章 STM32H7的Cache解读(非常重要)
- 王选院士谈院士增选:院士未必总是学术权威
- SAP 查找生产订单发料成本中心 逻辑
- GIS行业应用|智慧城市系列之智慧市政03
- 区块链下的保护个人信息安全武器
- dbconfig设置mysql_dbconfig配置 | 学步园
- 通达信程序接口SMII是什么?
- 计算机速录专业论文,试论现代汉语拼音在计算机速录技术中的应用
- 【Python】Python 中sqrt函数求负数的平方根
- Python实现输入三个整数x,y,z,请把这三个数由小到大输出
- 构建高效的整车系统级别评估平台,百度安全自动驾驶风险安全研究亮相NDSS2022AutoSec...
- 【C#上位机必看】你们要的Iot物联网项目来了