将四个点排列为正方形

时间:2012-03-07 23:30:50

标签: php math geometry

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

top left,
top right,
bottom left,
bottom Right

我现在正在使用PHP,但任何语言的帮助都很好。

{'我很快就会在PHP中添加到目前为止}}

在另一个stackexchange上问这个问题会更好吗,数学可能吗?

3 个答案:

答案 0 :(得分:0)

您可以先垂直对点进行排序,然后调出前2点前点和下2点下点。然后水平对点进行排序,并将最右边的两个点调到右边,另外两个点左边。现在你有一个。

答案 1 :(得分:0)

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

前两个点是“左”侧 - y较大的一个是“顶部”而另一个是“底部”。

最后两点是“正确的”,同样的交易。

这不适用于钻石! (但是,无论如何,钻石上的“左上角”是什么?)

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

然后,您可以计算质心和点之间的直线的参数(即角度),(y_pt-y_centroid,x_pt-x_centroid)arctan2

如果你按照他们的参数对点进行排序,它们将是逆时针顺序,-pi是指南针的西点,0是东方,再次环绕到+ pi是西点。

答案 2 :(得分:0)

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

同样适用于y和top / bottom。