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

标签 algorithm geometry

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

我是否应该选择通过比较距离来暴力破解它, 我最终会得到与 12 个顶点的 67 个距离,要比较所有顶点是不可行的。 我可以使用十字形或形状的任何特征吗?

最佳答案

您想要的是由两个相交的直线矩形定义的十字形状,所有四个边的突起都大于零。我相信以下算法将完全为您确定。

  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

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

关于algorithm - 如何确定具有给定顶点的十字形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52916611/

相关文章:

C xor 加密替代方案

c - 合并排序SEGV,数组指针消失?

algorithm - 无法在平衡二叉搜索树中找到键的后继

c++ - 使用 CGAL 的主成分分析进行点云对齐

python - 使用 arcpy : strange behaviour of SearchCursor 在列表中加载要素类

java - 字符串数组只包含字谜?

algorithm - 查找给定集合的所有子集的总和值

math - 如何计算椭圆的轴对齐边界框?

r - 使用solve/optim根据两点(半径已知)确定圆心

iphone - Three20 中的 TTSpeechBubbleShape 仅绘制 "speech"三角形顶部和底部