我在形成一种算法时遇到麻烦,该算法无法确定用户以任何顺序输入的12个顶点是否会在2D平面中形成十字形。 从我的角度来看,它可以是两个矩形相交。
我应该选择通过比较距离来强行使用它, 我最终将与12个顶点有67个距离,要比较所有这些顶点是不可行的。 我可以使用十字或形状的任何特征吗?
答案 0 :(得分:1)
类似以下的方法应该起作用:
x1
至x4
和y1
至y4
(x1, y2)
,(x1, y3)
,(x2, y1)
,(x2, y2)
,(x2, y3)
,(x2, y4)
, (x3, y1)
,(x3, y2)
,(x3, y3)
,(x3, y4)
,(x4, y2)
和(x4, y3)
,以任何顺序答案 1 :(得分:1)
您想要的是由两个相交的直线矩形定义的十字形,在所有四个侧面上的凸起均大于零。我相信以下算法将完全为您确定。
确保12个点都不相同。
在12个点中应该只有4个不同的X值。将它们按升序排列到称为X向量的数组中。
对Y值执行相同操作,以创建具有4个不同值的Y向量。
制作4x4数组,将所有单元格初始化为零。
使用它们的X和Y值以及X向量和Y向量遍历12个值中的每一个,以选择4x4数组中要递增的单元格。因此,如果您有一个点(12,9),而12在X向量的[0]入口处,而9在Y向量的[2]入口处,则可以增加[0,2]像元的4x4阵列。
现在您的4x4阵列应该看起来像这样:
0, 1, 1, 0 1, 1, 1, 1 1, 1, 1, 1 0, 1, 1, 0
如果是这样,则它是您定义的十字架。如果不是这样,或者它在任何先前的步骤中都失败了,那么它就不是一个十字架。