首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我试图找到一个矩形是否与凹多边形相交.这个算法能实现吗?

是的,可以通过一些几何算法来判断一个矩形是否与凹多边形相交。以下是一个可能的算法:

  1. 首先,判断矩形是否与凹多边形的外包围盒相交。如果外包围盒不相交,则矩形与凹多边形也不会相交,可以直接返回结果。
  2. 如果外包围盒相交,进一步判断矩形的四条边是否与凹多边形的任意一条边相交。可以使用线段相交算法来判断两条线段是否相交。
  3. 如果矩形的任意一条边与凹多边形的一条边相交,那么矩形与凹多边形相交。可以直接返回结果。
  4. 如果矩形的四条边都没有与凹多边形的任意一条边相交,那么矩形与凹多边形不相交。

这个算法可以通过遍历矩形的四条边和凹多边形的所有边来实现。时间复杂度取决于矩形和凹多边形的边数。

在腾讯云的云计算平台上,可以使用腾讯云的云服务器(CVM)来进行算法的实现和部署。同时,腾讯云还提供了丰富的云原生服务,如云函数(SCF)、容器服务(TKE)等,可以帮助开发者更便捷地进行开发和部署。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你被追尾了

例如我们想实现一个小球在如下的盒子内的移动,在移动过程中如果碰到边界就反弹(假定弹性碰撞,无机械损失). ? 那么我们只需要在小球外接一个正方形,然后判定该正方形和边框是否发生碰撞就行了....转换为蓝色矩形和蓝色圆形之后,就可以使用 圆形无旋转矩形 相交的判定方法了....注意,从投影的过程中,我们就能看出为什么 SAT 定理只能针对凸多边形有效,因为凸多边形一个多边形不具备的性质.就是凸多边形在它的任何一条边的同侧,而多边形可能在它的某条边的异侧....由于圆形可近似地看成一个有无数条边的正多边形,但是我们不可能按照这些边一一进行投影测试。...精细阶段(Narrow Phase) 当你有了较小的实体列表,你可以利用精细阶段的算法(如上述讲述的碰撞算法)得到一个确切的答案(是否发生碰撞)。 ?

4.6K30

图形编辑器开发:基于相交策略选中图形

OBB 相交检测 我们来实现更精准的 OBB 的相交检测。 为此西瓜哥调研(其实是瞎想)了几个方案,并研究了算法实现。...为此写了一篇判断两条线段是否相交的文章: 《几何算法:判断两条线段是否相交》 核心算法实现为: type Point = [number, number]; function crossProduct...(理论上应该做性能测试对比各种实现的,还要考虑用户使用选区的场景,是否会经常出现特定算法的最坏时间复杂度的情形,有空再做吧) 方案2:分离轴定理算法 这个算法挺有意思。...当发现投影产生的两条线段没有相交,那找到了那条那条分割两图形的直线,证明两个凸多边形相交。 否则继续,如果都没找到,说明相交。 下图是以一个图形的蓝边的法向量作为分离轴,进行投影的示意图。...结尾 矩形相交是分离轴定理相交算法的特殊情况。 是前端西瓜哥,欢迎关注,学习更图形编辑器知识。

14730

计算几何算法概览

二、目录   本文整理的计算几何基本概念和常用算法包括如下内容: 矢量的概念 矢量加减法 矢量叉积 折线段的拐向判断 判断点是否在线段上 判断两线段是否相交 判断线段和直线是否相交 判断矩形是否包含点...判断线段和直线是否相交:   有了上面的基础,这个算法就很容易了。...判断点是否多边形中的这个算法的时间复杂度为O(n)。   另外还有一种算法是用带符号的三角形面积之和多边形面积进行比较,这种算法由于使用浮点数运算所以会带来一定误差,不推荐大家使用。   ...判断线段是否多边形内:   线段在多边形内的一个必要条件是线段的两个端点都在多边形内,但由于多边形可能为,所以这不能成为判断的充分条件。...而这个步骤可以用前述的矢量叉积性质实现

1.4K40

关于包围盒,你需要知道的那些事

大家好,是前端西瓜哥。 本文将讲讲解二维中的包围盒。 三维的包围盒是一脉相承的,理解了二维也就懂了三维。 包围盒(bbox, bounding box)指的是包围图形的一个矩形。...实际上包围形状的图形某些情况下会使用多边形(凸包、包)或是圆形或是其他,不仅限于矩形的更泛用的叫法应该是 “包围体”(bounding volume)。...包围盒的作用 一种 高效 判断两个图形是否碰撞的方案,以降低精度为代价。退一步说,即使要进行精准的碰撞判定,也可以用包围盒提前发现图形不可能相交,避免后续的高昂运算。...它是一个矩形,且它的边是和轴线(比如 x 轴和 y 轴)对齐的。 这个 AABB 刚好紧密包裹住椭圆,所以这个包围盒同时也是 MBR(最小外接矩形)。...分离轴定理专门用来进行凸多边形之间的碰撞检测,矩形也是凸多边形,所以可以用。

11610

判断点在多边形算法的C++实现

算法思路 判断平面内点是否多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。...判断point(x,y)是否在side上,如果是,则返回true。 2). 判断lineside是否有交点,如果有则count++。...具体实现 在具体的实现过程中,其实还有一个极端情况需要注意:当射线line经过的是多边形的顶点时,判断就会出现异常情况。...针对这个问题,可以规定线段的两个端点,相对于另一个端点在上面的顶点称为上端点,下面是下端点。如果射线经过上端点,count加1,如果经过下端点,则count不必加1。...改进空间 很多情况下在使用该算法之前,需要一个快速检测的功能:当点不在多边形的外包矩形的时候,那么点一定不在多边形内。

5.5K30

Google S2 是如何解决空间覆盖最优解问题的?

复制代码 在这次 commit 里面还提到了一个新的网站,这个网站发现也是最近才发布出来的。因为笔者连续关注 S2 每个 commit 了快半年了。...它是一个具有各种具体子类型的抽象接口,如盘形,矩形,多段线,多边形,几何集合,缓冲形状等。 这个接口的主要目的是使复杂区域近似为更简单的区域。...可以使用 S2RegionTermIndexer 来索引一组多段线,然后查询哪些多段线给定的多边形相交。 二....RegionCoverer 举例 RegionCoverer 主要是要找到一个覆盖当前区域的近似最优解(为何不是最优解?)...丢弃任何该区域不相交的形状。然后重复选择形状相交的最大单元格并将其细分。 coverer 结构体里面的8个元素,前4个是外部传进来初始化的,后4个元素就是在这里被用到的。

3.1K31

hover 背后的数学和图形学

hover 是跟 DOM 绑定的,常规 DOM 是一个矩形(CSS 盒模型),鼠标移动时浏览器需要判断鼠标指针坐标是否这个 DOM 的矩形范围之内,根本上是一个数学问题,即判断一个是否位于一个矩形内...所以在 Canvas 2D 技术领域也通常会借鉴 WebGL 的实现方案,即通过数学方法判断一个是否位于一个不规则多边形内。...WebGL 中实现某个图形的 hover 以及click、mouseover、mouseout等鼠标事件的根本就是上文提到的判断一个是否位于一个不规则多边形内。...明确了上面两个问题之后,就只剩下判断两条线段是否相交一个问题了。这同样是个纯粹的数学问题。...回顾上文提到的多边形顶点数据制备,多边形的边是由相邻两个顶点相连而成,顶点是有序的,也就是说多边形的每条边都是有向线段,所以判断两条线段是否相交这个问题准确的说发应该是:判断两个有模向量是否相交

1.3K10

【笔记】《计算机图形学》(4)——光线追踪

,这样可以省去一些明显无用的计算 视线多边形相交 视线多边形相交判断是个更加复杂的问题,因为多边形可能是凸多边形多边形,平面交点可能刚好穿过多边形的空洞。...关键思路是计算射线在多边形平面的交点投影到二维平面的多边形可以形成的交点数量 首先求解下面的式子,其中p=e+td,通过求解t得出射线多边形所在平面相交的交点,这一步可以筛选掉多边形射线平行的情况...视线一组物体相交 场景中一般不会只有一个物体,对于复杂的场景通常的射线相交判断方法是先将需要判断是否相交的物体归为一组 然后计算出这组物体中所有相交的交点 返回交点t在范围内且最小物体,也就是最接近投影面物体...在这里算法取了个巧,通过比较法线光照向量和视线之间的角平分线的角度来判断视线是否接近于光线的镜面反射,由此得到下面的式子。...分析下面的伪代码更清楚地理解这部分,外层的if是前面光追程序的伪代码的延续,决定物体是否在观察范围内,但是在第一个if里,也就是被观察到的像素中,首先对所有物体附加上对应的环境光,然后内层的if判断光源发出的射线能否照射到它所看到的物体

2.3K20

5笔涂出一只3D猫咪模型,可跑可跳无需手动绑定骨骼,新鬼畜素材get丨浙大&开源

博雯 发自 非寺 量子位 报道 | 公众号 QbitAI 二维图片转3D模型的技术不少,但能用你画的草图实时生成骨骼绑定的3D模型见过?...再用DP(Douglas-Peucker)算法找到一个最接近形状的简化多边形。...当用户创建一个新的子部件或移动一个现有的子部件时,立即检查当前子部件是否与其他子部件相交。...如果相交,就把当前子部分的骨架被交的子部分的骨架连接起来: 这符合用户交互式地逐个创建三维模型的真实场景:新的子部件被连接到现有的子部件上,同时,新的子骨架被连接到相应的子骨架上。...△BoundedDP算法步骤 最终,一个最开始是手绘草图的图像,就变成一个绑定了骨骼的3D模型了: 算法速度更快,安装即玩 研究者首先对比了本文提出的骨骼模型生成算法已有方法的执行时间,可以看到,其速度优于大多数方法

82130

GeoSpark 数据分区及查询介绍

每个空间对象存储为点、矩形多边形类型。...点A和点B是一个矩形对角线上的一对顶点。RectangleRDD中的矩形还通过Apache Spark层分布到不同的机器上。 PolygonRDD:所有随机多边形对象都由PolygonRDD支持。...一旦初始化了SRDD,用户就可以使用这个SRDD的内置几何操作。从实现的角度来看,这些几何操作通过Map、Sort、Filter、Reduce等RDD算子Apache Spark Layer交互。...几何操作示例: Initialize():此操作的功能是初始化一个Spatial PointRDD、RectangleRDD或PolygonRDD,支持三个常见的几何对象:点、矩形多边形,以及相关的操作...Oerlap():在一个SRDD中,这个操作的目标是找到所有与其他几何对象相交的内部对象。 Inside():在一个SRDD中,该操作可以找到其他几何对象包含的所有内部对象。

9610

WPF 基础 2D 图形学知识 判断点是否在任意几何内部方法

中,可以使用 Geometry 表示几何,在这个类里面有提供特别的方法用来判断点是否在几何内 判断点在几何内 这个做法也叫命中测试,输入是一个 Geometry 和一个点,输出是判断点是否在闭合的 Geometry...而在几何图形里面,有很多特殊的几何图形,如凸多边形和三角形,矩形等,这些几何图形可以采用特别优化的算法,可以用来提升性能 求点是否在任意凸多边形之内的算法 对于凸多边形,可以有特别的算法优化。...可以找到网上有很多算法用于解决此问题,不仅仅是凸多边形,对于多边形也有计算方法 本文以下仅仅只提供了凸多边形的使用向量方式进行计算的方法,这是自己用过的算法 已知有多边形和点如下 ?...-计算几何之Cupid’s Arrow——hdu1756继续激情,继续奋斗 求旋转矩形命中测试 对于矩形这样的特殊的凸多边形,可以使用更特别的算法来进行优化 这是纯数学计算,给定一个旋转矩形,已知这个旋转矩形的各个顶点坐标...以及一个点,求这个是否在旋转矩形内 定义给定的点是 M 点,而旋转矩形顶点是 A B C D 点。在旋转矩形没有经过旋转的顶点如下 ?

1.3K20

004计算机图形学之多边形的扫描转换和区域填充

知道多边形的内部像素,如何反过来求多边形的边界。 多边形的扫描转换是指: 把多边形的顶点表示转换为点阵表示。也就是知道多边形的边界,如何找到多边形内部的点,即把多边形内部填上颜色。...多边形扫描转换 x-扫描线算法 按照扫描线顺序,计算扫描线多边形相交区间,再用要求的颜色显示这些区间的像素。 求交的工作量大。...改进算法是利用增量思想,考虑到图形的连贯性,同时引入一个特殊的数据结构,减少求交的计算量。 加权区域采样方法 符合人视觉系统对图像信息的处理方式,反走样效果更好。...将直线段看作是一条具有一定宽度的狭长矩形;当直线段像素有交时,根据相交区域像素中心的距离来决定其对象素亮度的贡献。

1.4K80

UE4Unity绘制地图基础元素-面和体

绘制多边形区域面 面数据通常以离散点串形式存储,面的绘制线的绘制原理类似。渲染的基本单位是三角形,线是通过扩展线宽构造三角形后渲染,而面是通过将多边形拆分为多个三角形后渲染。...顶面渲染流程和闭合区域面一致,侧面则是根据楼高进行绘制,在每两个相邻顶点间渲染一个矩形从而构成闭合体的侧面,为了减少绘制次数通常只绘制朝向外侧的侧面,底面在正常视角下看不到,也可以酌情选择是否绘制。...通过全链路的排查,才查出是多边形数据的问题。 三角剖分在使用时有一个前置条件:使用对象必须为简单多边形,即多边形中的任何两条边仅可以在顶点处相交。...简单多边形的判定修复 根据简单多边形的定义,很容易想到采用暴力解法进行判定:一个 [6bfde5c5d3504a829642a724fe8e07a8~tplv-k3u1fbpfcp-watermark.image...但对于需要实时处理的动态数据来说,其需要遍历所有组合,尤其对于可能仅存在少量相交点的情况,冗余计算太多,因此可以引入时间复杂度更低的相交判定算法进行处理。

1.2K51

判断点是否多边形内的Python实现及小应用(射线法)

判断一个是否多边形内是处理空间数据时经常面对的需求,例如GIS软件中的点选功能、根据多边形边界筛选出位于多边形内的点、求交集、筛选不在多边形内的点等等。...判断一个是否多边形内有几种不同的思路,相应的方法有: 射线法:从判断点向某个统一方向作射线,依交点个数的奇偶判断; 转角法:按照多边形顶点逆时针顺序,根据顶点和判断点连线的方向正负(设定角度逆时针为正...射线法的原理及实现 射线法就是以判断点开始,向右(或向左)的水平方向作一射线,计算该射线多边形每条边的交点个数,如果交点个数为奇数,则点位于多边形内,偶数则在多边形外。...该算法对于复合多边形正确判断。 ? 射线法的关键是正确计算射线每条边是否相交。并且规定线段射线重叠或者射线经过线段下端点属于不相交。首先排除掉不相交的情况,下图的情况都是需要排除掉的: ?...,y1]],[[w1,t1],……[wk,tk]]] 三维数组 #可以先判断点是否在外包矩形内 #if not isPoiWithinBox(poi,mbr=[[0,0],[180,90

9.4K40

一篇文章带你玩转PostGIS空间数据库

数据库求解 “什么线黄色星相交这个问题,是先用空间索引求解 “什么范围框黄色范围框相交这个问题的(速度非常快),然后才是 “什么线黄色的星星相交”。...每种投影方案都有优点和缺点,一些投影保留面积特征;一些投影保留角度特征,如墨卡托投影(Mercator);一些投影试图找到一个很好的中间混合状态,在几个参数上只有很小的失真。...ST_Buffer(geometry, distance)接受几何图形和缓冲区距离作为参数,并输出一个多边形这个多边形的边界输入的几何图形之间的距离输入的缓冲区距离相等。...关于它们的交集的DE9IM矩阵如下: 请注意,以上两个要素的边界实际上根本不相交(线的端点多边形的内部相交,而不是多边形的边界相交,反之亦然),因此B/B单元用"F"填充。...假设我们有一个湖泊(Lakes)和码头(Docks)的数据模型,进一步假设码头必须位于湖泊内部,并且必须在一端接触到湖泊的边界。我们能在数据库中找到所有符合这一规则的码头

1.4K40

用Nodejs爬取Matrix67的博客

趣题:把矩形分割为面积相同但形状各不相同的小矩形 趣题:八根并排放置的水管 正多边形的滚动旋轮线下方的面积 Turing机、人工智能以及我们的世界 趣题:填写两个声母互相颠倒的词 2月14日:送给你的礼物...趣题:用最少的点挡住所有可能的反射路径 对角线方法之后的故事 趣题:舞台里的狮子 2011年度最变态的迷宫难题 经典证明:不断把的部分翻出来,总能把多边形变凸?...玩转内接多边形(二):任意多边形内均存在内接矩形 推荐视频:大自然中的数学 玩转内接多边形(一):任意多边形内均存在内接正三角形 什么是算法:如何寻找稳定的婚姻搭配 也说Pizza问题:分享几个漂亮的证明...简单数学背后的经济学原理 趣题:用正则表达式判断一个二进制数是否被3整除 八卦的学问:实现所有人消息共享最少需要多少通电话?...一个不属于我的节日 不可能几何体分形图形 超强的储存方法:即使连续128个扇区全部损坏也恢复原数据 一个矩形剖分有关的命题(四):简便的数论证明 Geek的悲哀 牛B的Mathematica:寻找开头和结尾都是字母

98420

手把手教你实现手绘风格图形🔵

,根据贝塞尔曲线的性质,两个控制点一定是在线段的外面,直接用线段本身的两个端点来计算的话试了一下,比较难处理,不同的角度可能都需要特殊处理,所以我们参考Rough.js间隔一个点: 比如上图的多边形我们随便找一个线段...,但是不规则的多边形怎么办,所以需要找到一个通用的方法。...填充最暴力的方法就是判断每个点是否多边形内部,但是这样的计算量太大,查了一下多边形填充的思路,大概有两种算法:扫描线填充和种子填充,扫描线填充更流行,Rough.js用的也是这种方法,所以接下来介绍一下这个算法...详细的算法介绍和推导过程可以看一下这个PPT:https://wenku.baidu.com/view/4ee141347c1cfad6195fa7c9.html,接下来直接来看算法实现过程。...2.活动边表AET 也是一个数组,里面保存着当前扫描线相交的边信息,随着扫描线的扫描会发生变化,删除不相交的,添加新相交的。该表里的边按xi递增排序。

1.5K30

硬核万字长文:是如何把Skia的体积“缩小”到18的?

这也是目前找到的最好最稳定的办法,重点是不增加二进制体积。 几何 从这一节开始涉及渲染器最为核心的灵魂,数学是一切魔法的开始。 三角形和三角剖分 在图形学中三角形的重要性已经没有必要去描述了。...region 这类数据结构在表示区域的时候,会使用多个不相交矩形来进行数学表达。如果存在相交的情况可以利用线扫描快速剔除重叠的区域。这就是利用了他足够简单的特性,运算速度可以飞快。...Skia 中存在对 SkPath 的 OP 操作就是对这个算法实现。剔除多边形堆叠就可以简化成对多边形“自己”和“自己”求并集。 这是一个古老的数学问题。...我们在渲染前给显卡前设置一个矩形区域,如果有像素超过这个窗口就会被显卡丢弃掉。 但是显卡自带的裁剪能力要求裁剪的区域必须是一个矩形,并且这个矩形还不能够旋转。...可以使用多个矩形来表示一个复杂区域,但是要求矩形之间不能存在堆叠。下图描述了如何剔除矩形之间的堆叠,只需要执行一次线扫描算法即可。

1.9K10

【Web技术】1139- 手把手教你实现手绘风格图形

,根据贝塞尔曲线的性质,两个控制点一定是在线段的外面,直接用线段本身的两个端点来计算的话试了一下,比较难处理,不同的角度可能都需要特殊处理,所以我们参考Rough.js间隔一个点: 比如上图的多边形我们随便找一个线段...,但是不规则的多边形怎么办,所以需要找到一个通用的方法。...填充最暴力的方法就是判断每个点是否多边形内部,但是这样的计算量太大,查了一下多边形填充的思路,大概有两种算法:扫描线填充和种子填充,扫描线填充更流行,Rough.js用的也是这种方法,所以接下来介绍一下这个算法...详细的算法介绍和推导过程可以看一下这个PPT:wenku.baidu.com/view/4ee141…[4],接下来直接来看算法实现过程。...2.活动边表AET也是一个数组,里面保存着当前扫描线相交的边信息,随着扫描线的扫描会发生变化,删除不相交的,添加新相交的。该表里的边按xi递增排序。

78310
领券