针对如何判断点是否在某一个不规则封闭区域内,主要采用的是向量积法,算法原理参考:
> https://blog.csdn.net/ezhchai/article/details/78864336?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
向量积计算参考:
> https://blog.csdn.net/qq_15906905/article/details/97074749?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
向量积法的核心是通过判断相邻边与待定点间的向量叉积(非点积)符号是否相同来判断,但该算法必须要求不规则多边形为凸多变形。但不规则多边形可以剖分成很多个三角形区域。因此,下面的function主要考虑的是三角形,该function针对叉积为0,待定点在边延长线上或在边上,均进行了处理:
/**
* 根据向量积法判断一个点是否在不规则区域范围内,向量积采用的方式为叉乘,非点乘
* @param lon 经度,相当于x轴
* @param lat 纬度,相当于y轴
*/
def isInArea(lon: Double, lat: Double): Boolean = {
//是否在区域范围内的标识
var isIn = true
//不规则区域顺时针各顶点坐标
val area = Array((113.517068, 22.938879), (114.86467, 23.291998), (114.149475, 21.972672))
//顺时针方向各顶点连接成的向量
val areaArea = new ArrayBuffer[(Double, Double)]()
for (i <- 0 until (area.length - 1)) {
areaArea.append((area(i + 1)._1 - area(i)._1, area(i + 1)._2 - area(i)._2))
}
areaArea.append((area.head._1 - area.last._1, area.head._2 - area.last._2))
//待测点o与各顶点形成的向量
val vector = new ArrayBuffer[(Double, Double)]()
for (vertex <- area) {
vector.append((lon - vertex._1, lat - vertex._2))
}
//依次计算待测点o与各顶点向量的向量积
var vcp_pre = 0.0
var flag = true
for (i <- 0 until (area.length - 1) if flag) { //此处i只能取0,1
vcp_pre = vector(i)._1 * areaArea(i)._2 - vector(i)._2 * areaArea(i)._1
val vcp = vector(i + 1)._1 * areaArea(i + 1)._2 - vector(i + 1)._2 * areaArea(i + 1)._1
val cp = vcp_pre * vcp
if (cp == 0.0) {
flag = false
//此时应该判断该点是否在当前边的延长线上,若在延长线上则为false
if (vcp_pre == 0.0) {
if ((lon - area(i)._1) * (lon - area(i + 1)._1) > 0) isIn = false //判断是否在第一条边的延长线上
} else {
if (i < area.length - 2) {
if ((lon - area(i + 1)._1) * (lon - area(i + 2)._1) > 0) isIn = false //判断是否在下一条边的延长线上
} else {
if ((lon - area.head._1) * (lon - area.last._1) > 0) isIn = false //判断是否在下一条边的延长线上
}
}
} else if (cp < 0) { //前后相乘的结果必须为正,否则没有必要继续查找
flag = false
isIn = false
}
}
isIn
}
相关推荐
自学QT之不规则窗口和不规则按钮(亲测)
看到很多软件,尤其是游戏软件,有一些炫酷的界面,一直在想,他们究竟是怎么做到的呢?那明明是一张图片啊。 天下有我大QT做不到的事情吗?当然没有! 现在开始:请准备一张带有透明区域的png图片哦。 首先来看自定义不规则窗口的代码吧: Widget::Widget(QWidget *parent) : QWidget(parent) { this->setWindowFla
判断一个点是否在多边形内部 - 射线法思路
原文链接判断一个点是否在多边形内部 [1] 射线法思路、 判断一个点是否在多边形内部 [2] 射线法实现比如说,我就随便涂了一个多边形和一个点,现在我要给出一种通用的方法来判断这个点是不是在多边形内部(别告诉我用肉眼观察……)。首先想到的一个解法是从这个点做一条射线,计算它跟多边形边界的交点个数,如果交点个数为奇数,那么点在多边形内部,否则点在多边形外。这个结论很简单,那它是怎么来的?下面就简单讲
PhyGeoNet一种可用于不规则区域的物理信息极限学习机
主要就是解决了CNN求解域为非规则形状这样问题,同时将物理信息嵌入CNN中,实现了物理数据双驱动。
判断某个点是否在不规则图形内
输入:一些点的坐标;一个测试点 输出:是否在多边形内部 思路: (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。 (2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。 (3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明...
华为OD面试真题解析:Java核心原理、HBase实战与算法手撕
技术面试考察的不只是记忆,更是对基础原理与工程实践的贯通能力。从Java集合框架的并发安全设计,到JVM内存模型与GC调优,再到线程池参数的合理设定,这些核心知识点构成了后端开发的技术底座。而在海量数据场景下,HBase作为分布式列式存储系统,凭借其稀疏模型与Region扩展能力,成为高频读写方案的典型代表。与此同时,手撕算法环节强调边界处理与复杂度分析,滑动窗口等经典思路往往成为解题关键。本文以华为OD技术面试真题为载体,串联起Java核心机制、HBase实操与算法演练,帮助开发者系统地审视自身技能短板,
判断一个元素是否在可视区域
本文介绍了三种判断元素是否在可视区域的方法:1. offsetTop 和 scrollTop 适用于简单垂直滚动场景,实现简单但功能有限;2. getBoundingClientRect() 可精确检测元素位置,支持多维度判断但实现较复杂;3. Intersection Observer API 是现代浏览器的高效解决方案,性能优越但对旧版浏览器兼容性差。文章还对比了各方法的优缺点,并提供了代码示例,帮助开发者根据需求选择合适的技术方案。<|end▁of▁sentence|>
java 判断点在不规则区域围栏内
java 判断点在集合点围栏内 判断一个地理坐标是否在一个以多边形的顶点组成的地理围栏里 import java.awt.geom.Point2D; import java.util.ArrayList; import java.util.List; /** * @author fanxinjian * @date 2020/10/30 17:27 */ public class regionUtil { private static double EARTH_RADIUS = 6.
Mamba-ST实战:用状态空间模型实现艺术风格迁移的5个关键步骤
本文详细介绍了如何使用Mamba-ST状态空间模型实现高效的艺术风格迁移,涵盖环境配置、数据预处理、模型架构、训练策略和推理优化等5个关键步骤。Mamba-ST基于SSM(状态空间模型)构建,在保持生成质量的同时显著降低计算复杂度,为风格迁移领域提供了新的解决方案。
【算法】计算机图形学的一些经典小题:判断点在多边形内,随机生成三角形内的点,判断两个矩形是否相交等
前几天面试的时候被问到了,如何随机在三角形内生成点,我按照我的想法回答了一遍,但觉得回答的不够好。最后面试官说了一个最优的方法。觉得不错,顺带总结一下最近看到的一些关于计算机图形学方面的经典小题,知乎上看到的还有Leetcode上的 1.判断一个点是否在多边形内首先先说一下输入的内容,多边形的顶点是一个数组输入进来,其中每个相邻点之间对应着多边形上有边相连POINT p1 = ptPolygon[i
数分实战(01):Global_Superstore数据集解析与商业洞察
本文以Global_Superstore零售数据集为例,手把手指导数据分析实战全流程。从数据清洗、探索性分析到深度商业洞察,详细解析了如何通过Python处理缺失值与异常值,进行销售利润分析、客户细分与地理分析,并探讨了折扣与利润的微妙关系。文章旨在帮助读者建立数据分析思维框架,从数据中挖掘可指导实际业务决策的核心洞察。
Unreal5从入门到精通之Landscape地形系统
虚幻引擎 5 (UE5) 能够利用其强大的地形编辑工具套件创建大规模的地形世界。使用地形工具可以创建身临其境的户外地形,这些地形经过优化,可在多种不同设备上保持可播放的帧速率。
ospf的不规则区域
OSPF的不规则区域 OSPF中区域划分要求:1.区域之间必须存在ABR,2.区域划分按星型拓扑划分。但在现实中应种种不可抗因素,导致不规则区域的出现,常见的不规则区域如下: 在远离骨干的非骨干区域中,area 2和area 1间的ABR由于没有连接到骨干区域,被称为非法ABR,非法ABR可以收集所连区域的lsa
BP神经网络回归预测+SHAP可解释分析+新数据预测(MATLAB完整源码)
BP神经网络回归预测+SHAP可解释分析+新数据预测(MATLAB完整源码)
python计算不规则闭合区域的面积_Python:计算不规则轮廓lin内的面积
我试图在Python2.7中计算等高线内的面积。它是一个不规则区域,如下所示:基本上,我将轮廓的路径保存在以下路径中,并加载它:AoI_saved=np.load('C:\Users\Roberta\Desktop\Analysis\Pilot2\AoI\AoI_Lev1_'+pict[:-4]+'.npy')我可以在同一个文件中保存一个、两个或多个轮廓。对于由等高线定义的每个区域,我都要计算面积...
《Zephyr OS 入门与实战》第1章:Zephyr OS 架构与物联网定位
【代码】《Zephyr OS 入门与实战》第1章:Zephyr OS 架构与物联网定位。
【声纳与人工智能融合——从理论前沿到自主系统实战】第一章 声纳AI的数据基础:仿真、数据集与表征学习
该数据集的特点是包含了多种底质背景(沙地、泥地、碎石区)与噪声条件,适合验证模型的背景抑制能力。Urashima数据集由日本海洋研究开发机构(JAMSTEC)发布,基于自主水下航行器(AUV)采集,包含前视声纳序列数据,主要用于水下导航与避障算法评估,其数据包含了精确的姿态与深度标注,支持三维场景重建算法的训练。北约海洋研究与实验中心(CMRE)发布的CMRE datasets包含侧扫与合成孔径声纳数据,特别适用于跨传感器域自适应研究,数据集中包含了同一区域的多种声纳成像结果,为跨模态学习提供了基准。
OSPF接口的网络类型和不规则区域
BMA --- 支持广播的多点接入网络NBMA --- 不支持广播的多点接入网络。
Qt6.10 | Qt Bluetooth 蓝牙
本文介绍了QtBluetooth模块的功能和使用方法,包括蓝牙API概述、构建配置(CMake/qmake)、权限管理、平台支持(Linux/macOS特殊处理)、日志设置及许可信息。重点说明Linux平台的后端选择机制,以及macOS上的依赖限制。最后提及蓝牙聊天示例,展示RFCOMM协议通信的实现。全文提供了蓝牙开发的技术要点和注意事项。
js计算点是否在多边形范围内:项目推荐文章
js计算点是否在多边形范围内:项目推荐文章 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代Web开发中,地理位置和空间数据的处理变得日益重要。今天,我要为大家介绍一个开源项目——js计算点是否在多边形范围内。这是一个基于JavaScript的轻量级库,它提供了一个核心功能:判断一个点是否位于多边形内部。这项技术对于地图服务、地理信息系统(GIS)、游戏开发等领域...
ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储
ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储 508A内部存储区介绍 Data Zone Config Zone 508A Config Zone配置(自定义) - ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
android 扇形点击范围,Android饼图好画,但不规则区域点击如何区分?
前言前阵子帮团队招人,我很喜欢问候选人这个问题。点击区域是不规则的,该如何让手势事件在不规则区域内做出响应?如果候选人的答案是通过数学计算的方式来确定落点。我会微微一笑的反问他,如果是五角星怎么办?本文主要会介绍以下内容1、绘制饼图的几种方式2、不规则区域的点击3、文字居中公式先看一下最终实现的效果,代码地址在文末自定义的饼图如何绘制饼图?基础知识Path类型API描述添加弧形addArc添加弧形...
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
华为Python面试通关秘籍:从手撕代码到模型调参的避坑指南
本文为准备华为Python开发或算法工程师面试的求职者提供了一份实战指南。文章深入剖析了面试中的核心环节,包括考察工程化思维的“手撕代码”避坑技巧、从原理层面理解机器学习“八股文”的方法,并涵盖了Python并发编程与模型调参等关键技术要点,旨在帮助候选人系统性地提升面试表现和技术深度。
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
机器学习算法岗面试全记录:大厂考点拆解与手撕代码复盘
机器学习算法是AI领域工程师面试的核心考察点,覆盖监督学习、无监督学习、数据结构与优化算法等多个维度。理解模型推导、适用场景与局限性是夯实基础的关键,而KMP算法、粒子群算法等扩展内容也常成为区分候选人的差异化考点。扎实的算法功底与工程实践能力,直接关系到特征工程、模型评估、线上部署等真实业务问题的解决效率。在腾讯、阿里、网易等大厂算法岗面试中,面试官不仅会追问逻辑回归、SVM、决策树等经典模型的原理细节,还会通过手撕代码、项目深挖、场景设计等环节全面评估候选人的综合能力。以准备面试为契机,系统梳理算法知识
cesium判断一个点是否在一个范围内
尝试了很多包括:Cesium.PolygonPipeline.isPointInPolygon,Cesium.IntersectionTests.polygonContainmentTest都报错,只好使用外部库了。
数学之美--不规则多边形相交计算(1)
数学之美--不规则多边形相交计算前言 我决定写一些技术类的文章,想了半天都不知道从何入手,从编程语言方面来看C#,Java,C++以及python等我的基本功很差;如果从应用角度来完成某些的话,虽然工作流是我的长项,但是如果需要完整来描述工作流的话,我又要死掉无数的脑细胞.无果 最后在看Google的blog的时候突发奇想:我也可以来写写”数学之美”,虽
1万+



被折叠的 条评论
为什么被折叠?



