如何确定具有给定顶点的十字形

时间:2018-10-21 14:57:06

标签: algorithm geometry

我在形成一种算法时遇到麻烦,该算法无法确定用户以任何顺序输入的12个顶点是否会在2D平面中形成十字形。 从我的角度来看,它可以是两个矩形相交。

我应该选择通过比较距离来强行使用它, 我最终将与12个顶点有67个距离,要比较所有这些顶点是不可行的。 我可以使用十字或形状的任何特征吗?

2 个答案:

答案 0 :(得分:1)

类似以下的方法应该起作用:

  • 收集集合或列表中的点
  • 迭代点并找到不同的X和Y坐标; X和Y分别应有四个完全不同的值;如果有更多或更少,则不是十字形
  • 对不同的X和Y坐标进行排序,并将其分别命名为x1x4y1y4
  • 检查原始点列表是否恰好包含点(x1, y2)(x1, y3)(x2, y1)(x2, y2)(x2, y3)(x2, y4)(x3, y1)(x3, y2)(x3, y3)(x3, y4)(x4, y2)(x4, y3),以任何顺序
  • 是否需要满足其他属性,例如四个具有相同长度的臂,也使用确定的不同X和Y值进行检查

答案 1 :(得分:1)

您想要的是由两个相交的直线矩形定义的十字形,在所有四个侧面上的凸起均大于零。我相信以下算法将完全为您确定。

  1. 确保12个点都不相同。

  2. 在12个点中应该只有4个不同的X值。将它们按升序排列到称为X向量的数组中。

  3. 对Y值执行相同操作,以创建具有4个不同值的Y向量。

  4. 制作4x4数组,将所有单元格初始化为零。

  5. 使用它们的X和Y值以及X向量和Y向量遍历12个值中的每一个,以选择4x4数组中要递增的单元格。因此,如果您有一个点(12,9),而12在X向量的[0]入口处,而9在Y向量的[2]入口处,则可以增加[0,2]像元的4x4阵列。

  6. 现在您的4x4阵列应该看起来像这样:

0, 1, 1, 0
1, 1, 1, 1
1, 1, 1, 1
0, 1, 1, 0

如果是这样,则它是您定义的十字架。如果不是这样,或者它在任何先前的步骤中都失败了,那么它就不是一个十字架。