把四个点排列成一个正方形


Arranging four points as a square

这更像是一个几何问题,但
我有一个由4个点组成的数组(来自用户输入),可以按任何顺序排列
我正试图制定一个程序,返回每个点可能是什么,即

top left,
top right,
bottom left,
bottom Right

我现在使用PHP,但任何语言的帮助都可以。

{我将很快在PHP中添加到目前为止的内容}

这个问题最好在另一个堆叠交换中问,也许是数学问题

您可以按x坐标升序对点进行排序,如果有平局,则按y坐标升序排序。

前两个点是"左侧",y较大的一个是"顶部",另一个是是"底部"。

最后两点是"正确"的一方,相同的交易。

不过这对钻石不起作用!(但钻石上的"左上角"是什么呢?)

通常,对于点集,可以计算质心(x值是所有x值的平均值,y值是所有y值的平均数)。

然后,可以计算质心和点之间的线的自变量(即角度),即(y_pt-y_centroid,x_pt-x_centroid)arctan2

如果你根据它们的论点对这些点进行排序,它们将按逆时针顺序排列,-pi是指南针的西点,0是东方,再绕到+pi是西点。

您可以首先对点进行垂直排序,并将顶部的2个点称为顶部点和底部的2个底部点。然后对点进行水平排序,将最右边的两个点称为右边,另两个点则称为左边。现在每个都有一个。

x值最低的两个点组成左侧,另外两个组成右侧。

y和顶部/底部也是如此。