gpt4 book ai didi

algorithm - 多边形的重心

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:18:09 25 4
gpt4 key购买 nike

我正在尝试编写一个 PHP 函数来计算多边形的重心。

我看过其他类似的问题,但似乎找不到解决方案。

我的问题是我需要能够计算规则和不规则多边形甚至自相交多边形的重心。

这可能吗?

我还读过:http://paulbourke.net/geometry/polyarea/但这仅限于非自相交的多边形。

我该怎么做?你能给我指出正确的方向吗?

最佳答案

重心(也称为“质量中心”或“质心”可以使用以下公式计算:

X = SUM[(Xi + Xi+1) * (Xi * Yi+1 - Xi+1 * Yi)] / 6 / A
Y = SUM[(Yi + Yi+1) * (Xi * Yi+1 - Xi+1 * Yi)] / 6 / A

摘自Wikipedia :由 n 个顶点 (x0,y0), (x1,y1), ..., (xn−1,yn−1) 定义的非自相交闭合多边形的质心是点 (Cx, Cy),其中
X coordinate of the center
Y coordinate of the center
其中 A 是多边形的有符号区域,
Area formula

使用 VBasic 的示例:

' Find the polygon's centroid.
Public Sub FindCentroid(ByRef X As Single, ByRef Y As _
Single)
Dim pt As Integer
Dim second_factor As Single
Dim polygon_area As Single

' Add the first point at the end of the array.
ReDim Preserve m_Points(1 To m_NumPoints + 1)
m_Points(m_NumPoints + 1) = m_Points(1)

' Find the centroid.
X = 0
Y = 0
For pt = 1 To m_NumPoints
second_factor = _
m_Points(pt).X * m_Points(pt + 1).Y - _
m_Points(pt + 1).X * m_Points(pt).Y
X = X + (m_Points(pt).X + m_Points(pt + 1).X) * _
second_factor
Y = Y + (m_Points(pt).Y + m_Points(pt + 1).Y) * _
second_factor
Next pt

' Divide by 6 times the polygon's area.
polygon_area = PolygonArea
X = X / 6 / polygon_area
Y = Y / 6 / polygon_area

' If the values are negative, the polygon is
' oriented counterclockwise. Reverse the signs.
If X < 0 Then
X = -X
Y = -Y
End If
End Sub

有关更多信息,请查看此 websiteWikipedia .

希望对您有所帮助。

问候!

关于algorithm - 多边形的重心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271583/

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