欢迎光临数控镗铣床网站,技术力量雄厚,生产工艺先进

龙门数控镗铣床

卧式龙门铣床生产,cnc立式数控铣床价格

计算多边形重心的坐标

作者:希文      发布时间:2021-04-15      浏览量:0
背景介绍和问题分析在上一篇文章如何判断多

背景介绍和问题分析

在上一篇文章如何判断多边形的合法性时,通常需要在使用无人机规划飞行路线之前选择一个多边形区域。

当您在地图控件上显示此多边形区域时,经常会遇到将要映射到地图中心的多边形移动的需要。

的基本思想是得到多边形的重心坐标,然后使用地图控件的setCenter方法将地图的显示中心移动到多边形的重心。因此,如何求多边形重心坐标?

给出了一个公式:

平面多边形可分为n个有限简单图形。这些简单图形的重心是,面积,然后平面多边形重心的坐标是

一般来说,我们可以对多边形进行三角剖分,即多边形的总面积。这个公式可以理解为:

各三角形重心的横向坐标除以多边形*三角形面积之和/多边形总面积

各三角形重心纵向坐标除以多边形*三角形面积之和/多边形总面积

,因此问题被分成三个小问题:

算法解析

1。


三角形的重心:三个中线的交点。重心到一个顶点的距离是重心到顶点中点距离的两倍,即GC=2*gp,即重心坐标与CP段AB中点P的距离为1≤3。
假设A、B、C三个点的坐标

,则通过简单的坐标计算可得到

2的重心坐标。三角形

的面积是使用向量积计算的。我们知道,平面上两个向量的交叉乘法模等于以这两个向量为边的平行四边形的面积,而以这两个矢量为边的三角形是平行四边形面积的一半。

如上面所示,已知平面上的两点,由A、B和坐标原点构成的三角形的面积S

给出了这里的草拟操作:


为什么用原点作为第三个点在这里形成三角形?实际上,它是与下一个多边形的面积有关的。

3.求多边形的面积

我们在上面给出的求平面多边形重心的公式中提到,我们通常把多边形划分成多个三角形。
那么我们可以在哪里设置这个分区点P呢?这里的结论是:这个分界点可以在多边形的内部或外部设置。

为什么可以将此分区点设置为外部?我们可以把它推广到多边形的情况,用一个简单的三角形情况。
对于三角形abc,如果您记得

之外的一个点上设置分区点。To=https%3A%2F%2Fjuejin.Im%2Fpost%2F5cc7eea351882512fa03a481“Target=”_space“>”如何判断多边形是否合法“指出向量交叉积存在正负差,并根据上述三角形面积的计算,以P为分界点,利用向量乘积

得到三角形的面积a,因为矢量PB在矢量PA的顺时针方向顺时针方向上是负的。然后将上述面积计算公式理解为:

三角形abc面积=三角形PBC面积+三角PCA面积-三角形PAB面积

假定这四个点的坐标是:通过上述公式,我不会给出具体的计算过程,这里我们可以直接给出计算结果:

我们可以发现这四个点的坐标如下:通过上述公式,我不会给出具体的计算过程,在这里我们可以直接给出计算结果:

在计算结果中没有项目,因为它们在计算过程中被消除了,数学太棒了!因此,我们可以得出这样的结论:多边形的面积结果与分界点的位置无关,为了便于计算,我们选择将这个P点设为原点。

然后,只要我们知道多边形的每个顶点,通过原点将它们划分成多个三角形,然后通过向量的交叉乘法计算每个三角形的面积,最后加起来,就可以计算多边形的面积。

示例代码和解析

已经准备就绪。在这一点上,我们找到了所有的计算单元,满足多边形重心坐标的初始计算。现在是编写代码的时候了,在这里您构建了一个函数CompuatePolygonGravityCenter(坐标:[CLLocation协调员2D]),它在地图上传递一个多边形的坐标组。

func CalculatePolygonGravityCenter(坐标:[CLLocation协调员2D])->;CLLocation协调员2D{var Area=0.0//多边形面积var引力LAT=0.0//重心点var纬度变量重力lng=0.0//重心点(索引、坐标)。枚举(){/1让lat=坐标.纬度让lng=坐标.经度让nextLat=坐标[(index+1)%坐标.计数].纬度让nextLng=坐标[(索引+1)%坐标.计数].经度//2让temArea=(nextLat*-nextLng*lat)/2.0/3区域+=temArea//4重力LAT+=tunarea*(lat+nextLat)/3引力Lng+=temArea*(LNG+nextLng)/3}//5引力LAT=引力LAT/区域重力Lng=重力Lng/区域返回CLLocationPlate2D(纬度:引力LAT,经度:引力Lng)}

对上述代码的注释:

参考资料