判断一个点是否在多边形区域内--C算法
/*
函数的输入:
(1)当前点的坐标p
(2)区域顶点数组pt[];
(3)顶点数nCount
输出: 在区域内返回TRUE,否则返回FALSE。
Point类型是一个结构:
struct Point
{
类型 x;//此处类型根据采用的经纬度类型决定。
类型 y;
};
*/
BOOL PtInPolygon(Point p, Point pt[], int nCount)
{
int nCross = 0;
for (int i = 0; i < nCount; i++)
{
Point p1 = pt[i];
Point p2 = pt[(i + 1) % nCount];
if (p1.y == p2.y)
{
if (p.y == p1.y && p.x >= min(p1.x, p2.x) && p.x <= max(p1.x, p2.x))
return true;
continue;
}
if (p.y < min(p1.y, p2.y) || p.y > max(p1.y, p2.y))
continue;
double x = (double)(p.y - p1.y) * (double)(p2.x - p1.x) / (double)(p2.y - p1.y) + p1.x;
if (x > p.x)
nCross++;
else if (x == p.x)
return true;
}
if (nCross % 2 == 1)
return true;
return false;
}
建议转换成整形,因为浮点形的比较可能会出现边界问题
判断一个点是否在多边形区域内--C算法的更多相关文章
- php 判断一个点是否在一个多边形区域内
<?php class pointMap{ private static $coordArray; private static $vertx = []; private static $ver ...
- 百度地图java 判断当前位置是否在多边形区域内
package com.haiyisoft.cAssistant.adapter.hessian; import java.awt.geom.Point2D;import java.util.Arra ...
- 判断一个点是否在某个区域内。百度,高德,腾讯都能用。(php版)
<?php // *** 配置文件(表示区域的三维数组)其内的点,必须按顺时针方向依次给出! $area = array( // 天通苑店 0 => array( array('x'=&g ...
- Android判断一个点是否在矩形区域内
个人遇到的问题判断按钮的点击事件还是滑动事件 private boolean button1Down = false; private boolean button2Down = false; pri ...
- java/c# 判断点是否在多边形区域内
java/c# 判断点是否在多边形区域内 年06月29日 ⁄ 综合 ⁄ 共 1547字 ⁄ 字号 小 中 大 ⁄ 评论关闭 最近帮别人解决了一个问题,如何判断一个坐标点,是否在多边形区域内(二维). ...
- HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
LINK:Cupid's Arrow 前置函数 atan2 返回一个向量的幅角.范围为[Pi,-Pi) 值得注意的是 返回的是 相对于x轴正半轴的辐角. 而判断一个点是否在一个多边形内 通常有三种方法 ...
- 判断点在不在多边形范围内c#
C# 计算地图上某个坐标点的是否在多边形内 这个方法引用自群友的博客 https://www.xiaofengyu.com/?p=143 使用百度地图的时候,常常会用到判断一个点是否在一个多边形的 ...
- PHP计算经纬度在百度多边形区域内
最近做一个项目需要使用到区域,并且要判断当前的经纬度是否在区域内,已便对应业务需求变化.废话不多说直接上代码: /** * 验证区域范围 * @param array $coordArray 区域 * ...
- PNPoly算法代码例子,判断一个点是否在多边形里面
写C语言的实验用到的一个算法,判断一个点是否在多边形的内部.C的代码如下: int pnpoly(int nvert, float *vertx, float *verty, float testx, ...
随机推荐
- hdu1072
#include <iostream> #include <cstdio> #include <cstring> #include <queue> us ...
- 【TMF eTOM】业务流程框架介绍
TMF文档版权信息 Copyright © TeleManagement Forum 2013. All Rights Reserved. This document and translations ...
- UPC11073(DP,思维)
#include<bits/stdc++.h>using namespace std;long long dp[507][507];const long long mod = 998244 ...
- print和sys.stdout
print print语句执行的操作是一个写操作,把我们从外设输入的数据写到了stdout流,并进行了一些特定的格式化.和文件方法不同,在执行打印操作是,不需要将对象转换为字符串(print已经帮我们 ...
- > Task :app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
> Task :app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED D8: Cannot fit requested ...
- Jmeter常用线程组设置及场景运行时间计算
Jmeter中通过线程组来模拟大用户并发场景,今天主要介绍三个常用的线程组,帮助我们设计更加完善的测试场景,另外介绍下场景执行时间如何计算. 一.Thread Group 取样器错误后要执行的动作 ...
- 时间format函数引爆的知识点和年末有话说
年末感慨 转眼之间,一年的最后一天来了. 2017,技术界貌似正在飞跃.多年的量变终于引起了质变. 人工智能,区块链.对此,我很激动,激动着有点害怕,害怕中有点紧张,还有点渴望.未来的至高点,未来的风 ...
- BufferedReader readLine
import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.digest.DigestUtils; In ...
- 开元java开发工具
开元java开发工具 http://www.hutool.cn/
- HDU 5792 L - World is Exploding 。容斥原理 + 树状数组 + 离散化
题目,要求找出有多少对这样的东西,四个数,并且满足num[a]<num[b] &&num[c]>num[d] 要做这题,首先要懂得用树状数组,我设,下面的小于和大于都是严格 ...