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

给定一个边边可能相交多边形,求它轮廓线

最近遇到一个需求,给定一个多边形(边边可能相交),求这个多边形轮廓线。 需要注意是,轮廓线多边形内不能有空洞,使用不是常见非零绕数规则(nonzero)以及奇偶规则(odd-even)。...整体思路 计算多边形各边交点,求出一个有多边形点和交点信息邻接表。 从最下方点开始,找出与其相邻节点中夹角最小点保存到路径中,不断重复这个行为,直到点又回到起点位置。...这里部分借鉴了凸包算法其中一种叫做 Jarvis步进法 解法。 原理很简单,就是代码太多,容易写错,需要调试。...所以我们首先要做是 求出目标多边形所有交点,并更新邻接表,得到一个额外带有交点信息多边形邻接表。 我们来看看具体要怎么实现。 求交点以及更新邻接表 这里需要一个求两线段交点算法。...‘1-2’: [ [0, 1], // 点 1,距离起点 0 [0, 4], // 点 4,距离起点 40 [96, 2], // 点 2,距离起点 96 ] } 另一条相交

12310

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

通常来说通过规定投影面的四边界偏移值和投影面的横像素数量nx和纵像素数量ny,四边界分别是左边界l,右边界r,上边界t,下边界b,然后用下面的式子求得(i,j)处像素横纵偏移值(u,v),再叠加到视点位置上得到具体像素位置...然后下面是几个典型情况: 视线相交 为了简化问题,先尝试判断视线球模型相交点 在高数中,我们都知道球上一点方程可以写做 (p − c) · (p − c) −R^2 = 0,其中p是点坐标...视线三角面相交 这是最常见相交问题,需要用到之前提到三角重心坐标系概念 视线三角面相交实际上是求解一个直线平面交点问题,类似球相交,我们首先将直线方程代入到三角平面方程中,这里使用之前重心坐标方程...,这样可以省去一些明显无用计算 视线多边形相交 视线多边形相交判断是个更加复杂问题,因为多边形可能是凸多边形或凹多边形,平面交点可能刚好穿过多边形空洞。...关键思路是计算射线在多边形平面的交点投影到二维平面的多边形可以形成交点数量 首先求解下面的式子,其中p=e+td,通过求解t得出射线多边形所在平面相交交点,这一步可以筛选掉多边形射线平行情况

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

POSTGIS 总结

ST_Touches() 测试两个几何图形是否在它们边界上接触,但在它们内部不相交 如果两个几何图形边界相交,或者只有一个几何图形内部另一个几何图形边界相交,则**ST_Touches(geometry...6.2 ST_Buffer **ST_Buffer(geometry, distance)**接受几何图形和缓冲区距离作为参数,并输出一个多边形,这个多边形边界输入几何图形之间距离输入缓冲区距离相等...如果多点中有两个或两个以上点重合(也就是坐标一致),那么它就不是简单,但是确是有效 7.2 线串简单性有效性 7.2.1 单线串 单线串(LINESTRING)如果有重叠、相交就不是简单(除了端点相交...,端点相交就说明这条线串是闭合,但它是简单) 7.2.2 线串 线串(MULTILINESTRING)只要它元素(LINESTRING)都是简单,且两个元素只在某个点相切,那么它就是简单 7.3...多边形简单性有效性 7.3.1 单多边形 有效性: 多边形环必须闭合 内环应该处于外环内部 环不能自相交(它们不能相互接触,也不能交叉) 环不能与其他环接触,除非在某个点相切(只能有一个在一个点相切

5.6K10

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

空间索引有很多种,网格索引、四叉树索引、金字塔索引… 其原理:过于先进,暂不展示 4.空间函数是什么东东 二维虫子可想不到三维世界有复杂:分析几何信息、确定空间关系… 空间数据库当然需要专业解决这些问题...数据库求解 “什么线黄色星相交” 这个问题,是先用空间索引求解 “什么范围框黄色范围框相交” 这个问题(速度非常快),然后才是 “什么线黄色星星相交”。...这对于空间连接(spatial join)非常有用,因为在两个多边形图层上使用St_Intersects(geometry, geometry)通常会导致重复计算:位于两个多边形边界多边形将与两侧多边形相交...ST_Buffer(geometry, distance)接受几何图形和缓冲区距离作为参数,并输出一个多边形,这个多边形边界输入几何图形之间距离输入缓冲区距离相等。...关于它们交集DE9IM矩阵如下: 请注意,以上两个要素边界实际上根本不相交(线端点多边形内部相交,而不是多边形边界相交,反之亦然),因此B/B单元用"F"填充。

1.8K50

计算几何算法概览

判断两线段是否相交:   我们分两步确定两条线段是否相交:   (1)快速排斥试验     设以线段 P1P2 为对角线矩形为R, 设以线段 Q1Q2 为对角线矩形为T,如果R和T不相交,显然两线段不会相交...判断线段、折线、多边形是否在矩形中:   因为矩形是个凸集,所以只要判断所有端点是否都在矩形中就可以了。   判断矩形是否在矩形中:   只要比较左右边界和上下边界就可以了。   ...Q-P'完全连续,所以P1Q和QP'一定跨越多边形边界,因此在P1,P'之间至少还有两个该线段和多边形交点,这和P1P2是相邻两交点矛盾,故命题成立。...另外,一开始就先利用矢量叉乘判断线段线段(或直线)是否相交,如果结果是相交,那么在后面就可以将线段全部看作直线来考虑。...求线段或直线折线、矩形、多边形交点:   分别求每条边交点即可。   求线段或直线交点:   设圆心为O,圆半径为r,直线(或线段)L上两点为P1,P2。   1.

1.5K40

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

判断一个点是否在多边形内是处理空间数据时经常面对需求,例如GIS软件中点选功能、根据多边形边界筛选出位于多边形点、求交集、筛选不在多边形点等等。...)求和判断; 夹角和法:求判断点所有边夹角和,等于360度则在多边形内部。...面积和法:求判断点多边形边组成三角形面积和,等于多边形面积则点在多边形内部。...面积和法涉及多个面积计算,比较复杂,夹角和法以及转角法用到角度计算,会涉及反三角函数,计算开销比较大,而射线法主要涉及循环多边形每条边进行求交运算,但大部分边可以通过简单坐标比对直接排除,因此这是比较好方法...该算法对于复合多边形也能正确判断。 ? 射线法关键是正确计算射线每条边是否相交。并且规定线段射线重叠或者射线经过线段下端点属于不相交。首先排除掉不相交情况,下图情况都是需要排除掉: ?

9.4K40

一种快速判断点在多边形算法

由于业务需要, 我总结了一种快速判断点在多边形算法。 先说思路: 如图: 如果点在多边形内部,射线第一次穿越边界一定是穿出多边形。 如果点在多边形外部,射线第一次穿越边界一定是进入多边形。...当射线穿越多边形边界次数为奇数时,所有第奇数次(包括第一次和最后一次)穿越都是穿出,由此可推断点在多边形内部。 实现关键点 1....点在多边形边上 前面我们讲到,射线法主要思路就是计算射线穿越多边形边界次数。那么对于点在多边形边上这种特殊情况,射线出发这一次,是否应该算作穿越呢?...点和多边形顶点重合 思路:参考点边顶点重合,则直接是 x == X && y == Y ,其中x,y是边顶点, X,Y是参考点, 则直接返回。 3....射线经过多边形顶点 思路:这时相交点次数无论内外都是偶数次,无法判断。

99410

算法 - PNPoly解决点和多边形问题

根据以上公式,我们可以求出t,进而求出点D坐标,最终PD长度就很容易求得了。...假设配送范围多边形点横纵坐标分别存放在两个数组xs、ys里,(x,y)表示配送点坐标,先贴代码: private static void polygon(double[] xs, double[]...这个表达式意思是说,随便画个多边形,随便定一个点,然后通过这个点水平划一条线,先数数看这条横线和多边形相交几次(可先排除那些不相交边,即第一个判断条件),然后再数这条横线穿越多边形次数是否为奇数...点在直线下 - 相交判断 如下图,ab过p点水平线相交于c, ? 则有: ? Java代码实现: if (((ys[j] > y) !...contained;} 点在多边形内部 - 射线法 判断点是否在多边形内,可以从这个点做一条射线,计算它跟多边形边界交点个数,如果交点个数为奇数,那么点在多边形内部,否则点在多边形外。

2.2K31

PostGIS空间数据库简明教程

除了基本几何图形,PostGIS 还支持一些更高级几何图形:版本基本几何图形 - 点、线串或多边形同质集合基本几何图形 3D 版本 - 添加了 Z 坐标的基本几何图形相同几何集合——任意几何集合...这通常是通过将对象代表地图可见部分矩形相交来完成。...树叶子是代表 PostGIS 列中空间对象边界矩形。图片这样,我们可以快速遍历树以找到哪些对象给定对象相交,而不是检查每个对象是否相交。...它包括有关坐标信息、(0, 0) 点在地球上位置、坐标的分辨率以及地图上坐标如何地球上实际点相对应。...SRID 转换为目标 SRID,并输出一个 SRID 为 4326 多边形,该多边形可以另一个多边形相交而不会出现错误。

2.7K30

python地理处理包shapely

文章目录 构建集合图形以及获取集合图形点信息 多边形显示 多边形分割 Polygon 被 MultiLineString 切割 merge 多个多边形 从Python形状多边形提取点/坐标 检查地理点是否在...图2 左边是有效LinearRing,右边是无效相交LinearRing。描述环点以灰色显示。环边界是空 注意:Shapely不会阻止这种环产生,但在对其进行操作时会引发异常。...第一个是(x,y[,z])点元组有序序列,其处理方式LinearRing完全相同。第二个是一个可选无序环状序列,指定了特征内部边界或“洞” 有效多边形环不能相互交叉,且只能接触一个点。...例如,两个LineStrings 可以沿一条线在一个点相交。为了表示这些结果,Shapely提供了类似冻结集、不可变几何对象集合。...一个封闭要素边界空集合重合。

4.1K40

GIS拓扑讲解点线面几何体拓扑关系判断及运算分析_turf案例

坐标筛选,pointsWithinPolygon筛查出在多边形坐标、GRIDS:网格,生成各种网格classification:分类,nearestPoint,寻找最靠近目标的点BOOLEANS:...不能在线线之间,和点点之间,也不能在面面之间使用。脱节:Disjoint几何形状没有共有的点 A∩B=∅, 检查两个几何对象是否相交。...接触:Touch几何形状有至少一个公共边界点,但是没有内部点。检查两个几何对象是否相连判断两个图形边界是否相交,如果两个图形交集不为空,但两个图形内部交集为空,则返回值为真。...拓扑关系判断需要注意点是:overlaps 重叠这里重叠跟平时我们理解不太一样,这里重叠,必须是AB有交集,且AB交集不能和A,B一样,其实就是我们平时理解相交。...crosses 穿过(相交)这里拓扑关系比较特殊,使用crosses,不能在同纬度使用,但可以在不同维度使用,如:点和线,线和面等。不能在线线之间,和点点之间,也不能在面面之间使用。

2.4K10

你被追尾了

而假设 矩形中心坐标R(rectCenterX, rectCenterY), 令 C(rotateCircleX, rotateCircleY) 是旋转后圆心坐标,那么就有如下等式 其中...则就可以使用上述数学公式方便计算旋转之后 圆心坐标. 转换为蓝色矩形和蓝色圆形之后,就可以使用 圆形无旋转矩形 相交判定方法了....其实上面将熊猫(竹子)离屏数据渲染出来只是为了效果直观一些,实际运用过程中,肯定不会将这些离屏数据在屏幕上渲染出来,而是在内存中使用,因为内存中操作这些数据肯定远比在屏幕上渲染出这些数据快....由于圆形可近似地看成一个有无数条边多边形,但是我们不可能按照这些边一一进行投影测试。...这些数据结构可以是:四叉树(Quad Trees)、八叉树(OcTree)、R树(R-Trees)或空间哈希映射(Spatial Hashmap)等,但据笔者所知,R 树在数据库高维索引方面应用可能更加广泛

4.6K30

SQL2008空间数据类型--欧氏几何2类方法

下图就能够反映出这些几何对象类关系。 由于我自己本身对C#比较熟悉(其实其他语言也就不怎么会了),这里我就按照C#方式来讲一下。 首先要将是函数。...由于Geometry类是其他类父类,所以先说该类实例方法,这些方法将在其继承类中同样适用。...所谓简单就是指满足:1.实例每个图形不能与自身相交,但其终点除外。2.实例任何两个图形不可在某个点上相交,但两个边界点除外。...也就是STBoundary 方法再去掉中间边界。返回LineString。 STNumInteriorRing 返回多边形内环数。也就是孔数量。返回int。...MultiSurface类方法: STCentroid 返回多边形集合重心坐标,Point类型。

76820

ArcGis多边形覆盖面不理想?来让我告诉你怎么改

先上效果图 一、前言 在Vue ArcGis鼠标打点、中心打点绘制多边形这篇文章里给大家讲了ArcGis如何绘制多边形,那在ArcGis绘制多边形多边形边界不理想怎么办?想调整多边形覆盖面怎么办?...mapView.on("click", (event) => { this.mapLayerController(event); }); 复制代码 三、获取 hitTest hitTest 返回指定屏幕坐标相交每一层最顶层要素...如果命中相交要素,以下图层类型将返回结果:GraphicsLayer、FeatureLayer、CSVLayer、 GeoRSSLayer、KMLLayer和StreamLayer。...当地图点击事件以上相关图层中元素相交时会返回相关结果,而我们将我们多边形绘制在了GraphicsLayer层,当点击多边形时hitTset会返回我们当前点击这个多边形实例。...,处理已绘制好多边形图形 在hitTest返回多边形实例内判断绘制多边形时打的点位数组是否为空,因为编辑图形时update会创建一个新可编辑多边形,需要先删除已绘制好的多边形图形。

88640

为第12版 Wolfram 语言建立均匀多面体

但是,现在依然没有一个普遍接受多面体定义。有些人说多面体包括凸多面体和非凸多面体,而另一些人认为多面体只是凸多面体。 多边形研究者还在其他很多方面有争论。如果多面体内有多边形相交呢?...在第十二版中,我们可以使用EntityList和UniformPolyhedron来为我们提供均匀多面体信息: ? 从模型中提取信息 一般能找到多面体模型长这样: ? 这些是均匀多面体图形表示。...这个模型有相交多边形,也没遵守多边形“右手法则”(如图所示),说明它面朝向不对: ? 为了在这个项目中复制多面体,必须改变这些模型来解决这些问题。...第一个模型相比,我们可以看到这个壳体缺少八边形面。可以通过可视化第一个模型壳体比较来定义这些面: ? 现在我们把新八边形面加入壳体中: ? 这样就创建了一个新小菱方八面体!...一旦决定了哪里面可以被分割,可以从BSP树方法中得到网格中提取坐标。 切割角? 虽然我们有所有均匀多面体精确坐标,有些多面体中相交面使得很难决定在哪里分割多边形,尤其是在非凸多边形中。

3.5K10

地理空间数据库复习笔记:关系数据库标准语言、几何对象模型查询

线段(Line): 折线特例,只有两个点线串 环线(LineRing): 由折线派生而来,闭合、不自相交或相切折线 面(Surface): 二维几何对象类,代表一个外边界、零到多个内边界组成几何对象...在三维空间中,可能是一个同构曲面 多边形(Polygon) 二维坐标空间中由一个外边界、零到多个内边界定义平坦表面,由一个或一个以上线环聚合而成,如省份 仅支持由折线串围成多边形...由多条折线聚合而成,如由多条河流组成水系 曲线允许出现弧线,折线由折线组成 多多边形(MultiPolygon): 多面的子类,由多个多边形对象聚合而成,例如多个岛屿组成群岛(大比例尺) 坐标维数和几何维数区别...M值:点类除了x, y, z坐标外,还有一个M坐标 M值是线性参考系统一个重要度量值 例如,高速公路上里程碑点可用其M值表示从高速公路起点到当前位置距离 由于体表面违反了“多边形元素只能相交在有限数量点上...,这些数据类型解释和维护由DBMS负责 相关空间数据访问方法作为扩展函数嵌入到DBMS中 空间数据引擎(如ArcSDE)区别 基于numeric和BLOB实现,要素表(Feature)、几何列表

1.1K20

使用Path2D和凸包算法实现地理围栏服务

前言 地理围栏(Geo-fencing)是LBS一种新应用,就是用一个虚拟栅栏围出一个虚拟地理边界。...先通过高德地图在线编辑一个多边形覆盖图,然后获取到有序坐标 https://lbs.amap.com/api/javascript-api/example/overlayers/polygon-draw-and-edit...path2d.contains(point) 以上用到了方法详解 contains(double x, double y) 测试指定坐标是否在边界内Shape 3.判断某个矩形区域是否在Path2D...根据当前地图窗口查询所有相交Path2D 根据当前地图显示范围获取到northeast东北角和southwest西南角坐标位置,查询相交所有Path2D 高德地图示例地址: https://lbs.amap.com...intersects(double x, double y, double w, double h) 测试内部是否Shape指定矩形区域内部相交

1.7K10

CAD常用基本操作

《道德经》34.jpg CAD常用基本操作 1 常用工具栏打开和关闭:工具栏上方点击右键进行选择 2 动态坐标的打开关闭:在左下角坐标显示栏进行点击 3 对象捕捉内容选择:A在对象捕捉按钮上右键点击...,从菜单栏直接选择调用相应简单 13 正多边形命令:polgon(POL) A 正多边形默认可选择变数为3~1024,1024以上默认为圆 B 边(E):通过指定一条边长度绘制正多边形 C 多边形绘制中默认边...15 构造线命令:xline(XL) A 垂直(V)或水平(H):绘制垂直或水平构造线 B 角度(A):绘制x轴正向呈一定夹角构造线,其中参照(r)用于绘制所选直线呈一定夹角构造线 C 二等分...(F) A 半径值(R):输入倒角半径值 B 修剪(T):控制圆角命令是否将选定边修剪到圆角弧端点(是否保留原图形) C 段线(P):在二维段线中两条线段相交每个顶点处插入圆角弧(如果一条弧线段将会聚于该弧线段两条直线段分开...必须选择选定边界对象,以按照当前孤岛检测样式填充这些对象。选择对象时,可以随时在绘图区域单击鼠标右键以显示快捷菜单。

5.4K50
领券