擅长:python、mysql、java
<p>你的算法不正确。首先需要根据坐标与多边形质心所形成角度的反正切对坐标进行排序。(以获得形状中坐标的正确顺序)</p>
<pre><code>from math import atan
def sort_coordinates(centroid, shuffled_coordinates):
Cx, Cy = centroid
return sorted(shuffled_coordinates, key=lambda p: math.atan2(p[1]-Cy,p[0]-Cx))
</code></pre>
<p>然后,可以使用对坐标计算形状边的长度,并将所有边相加以获得周长:</p>
<pre><code>def perimeter(coordinates):
return sum(math.sqrt(pow(y2-y1,2)+pow(x2-x1,2)) for (x1,y1),(x2,y2) in zip(coordinates, coordinates[1:]))
</code></pre>