gpt4 book ai didi

Python:找到一种计算多边形的 "inner centroid"(X,Y)的方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:01 24 4
gpt4 key购买 nike

我有一个多边形(在 Shapely 对象中转换)。我的目标是按照图形示例计算“内部质心”(也称为“表面上的点”)(返回 x、y 值)和“质心”(返回 x、y 值):

enter image description here

from shapely.geometry import Polygon

ref_polygon = Polygon(points)
# get the x and y coordinate of the centroid
ref_polygon.centroid.wkt
'POINT (558768.9293489187300000 6361851.0362532493000000)'

我的问题是一些程序员已经在 Python 中开发了一个函数来计算内部质心或者知道一些模块来执行此操作。

提前致谢

使用的点(多边形的顶点)是:

points = [(560036.4495758876, 6362071.890493258),
(560036.4495758876, 6362070.890493258),
(560036.9495758876, 6362070.890493258),
(560036.9495758876, 6362070.390493258),
(560037.4495758876, 6362070.390493258),
(560037.4495758876, 6362064.890493258),
(560036.4495758876, 6362064.890493258),
(560036.4495758876, 6362063.390493258),
(560035.4495758876, 6362063.390493258),
(560035.4495758876, 6362062.390493258),
(560034.9495758876, 6362062.390493258),
(560034.9495758876, 6362061.390493258),
(560032.9495758876, 6362061.390493258),
(560032.9495758876, 6362061.890493258),
(560030.4495758876, 6362061.890493258),
(560030.4495758876, 6362061.390493258),
(560029.9495758876, 6362061.390493258),
(560029.9495758876, 6362060.390493258),
(560029.4495758876, 6362060.390493258),
(560029.4495758876, 6362059.890493258),
(560028.9495758876, 6362059.890493258),
(560028.9495758876, 6362059.390493258),
(560028.4495758876, 6362059.390493258),
(560028.4495758876, 6362058.890493258),
(560027.4495758876, 6362058.890493258),
(560027.4495758876, 6362058.390493258),
(560026.9495758876, 6362058.390493258),
(560026.9495758876, 6362057.890493258),
(560025.4495758876, 6362057.890493258),
(560025.4495758876, 6362057.390493258),
(560023.4495758876, 6362057.390493258),
(560023.4495758876, 6362060.390493258),
(560023.9495758876, 6362060.390493258),
(560023.9495758876, 6362061.890493258),
(560024.4495758876, 6362061.890493258),
(560024.4495758876, 6362063.390493258),
(560024.9495758876, 6362063.390493258),
(560024.9495758876, 6362064.390493258),
(560025.4495758876, 6362064.390493258),
(560025.4495758876, 6362065.390493258),
(560025.9495758876, 6362065.390493258),
(560025.9495758876, 6362065.890493258),
(560026.4495758876, 6362065.890493258),
(560026.4495758876, 6362066.890493258),
(560026.9495758876, 6362066.890493258),
(560026.9495758876, 6362068.390493258),
(560027.4495758876, 6362068.390493258),
(560027.4495758876, 6362068.890493258),
(560027.9495758876, 6362068.890493258),
(560027.9495758876, 6362069.390493258),
(560028.4495758876, 6362069.390493258),
(560028.4495758876, 6362069.890493258),
(560033.4495758876, 6362069.890493258),
(560033.4495758876, 6362070.390493258),
(560033.9495758876, 6362070.390493258),
(560033.9495758876, 6362070.890493258),
(560034.4495758876, 6362070.890493258),
(560034.4495758876, 6362071.390493258),
(560034.9495758876, 6362071.390493258),
(560034.9495758876, 6362071.890493258),
(560036.4495758876, 6362071.890493258)]

最佳答案

术语“内部质心”在计算几何学中并不是一个明确定义的术语,但从您的帖子中可以清楚地看出您想要计算一个完全位于多边形内部的点(它与附近的边之间有一些边距) ),并且相当接近真正的质心。

以下是您可以尝试的几个想法:

算法A

  1. 生成多边形的所有内部对角线。

  2. 对于每个内部对角线,考虑中点,并根据它与最近边缘的距离以及它与质心的接近程度为其打分。

  3. 选择得分最高的中点。

多边形的内部对角线是连接两个完全位于多边形内的不相邻顶点的线。可以在 O(m + n log log n) 使用相当复杂的算法 due to Hershberger ,或者在 O(n2) 中使用更直接的算法。

算法B

  1. 对多边形进行三角剖分。

  2. 对于三角剖分中的每个三角形,考虑三角形的质心(或者可能是 incenter ?),并根据它与最近边的距离以及它与最近边的接近程度为其打分多边形的质心。

  3. 选择得分最高的三角形中心。

可以使用基于分解成单调多边形的算法在 O(n) 中对具有 n 个顶点的简单多边形进行三角剖分 due to Chazelle ,或者在 O(n2) 中使用更简单的方法,如“ear clipping”。

关于Python:找到一种计算多边形的 "inner centroid"(X,Y)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com