确定是否存在所有点所在的线

时间:2014-12-10 17:47:06

标签: algorithm

我试图创建一个算法来确定平面上是否存在水平或垂直线,以便对于该位置上的每个点,它可以位于垂直线,水平线或两条线上。该算法只需要是顺序的,并返回true或false。

我知道需要做什么,即我需要检查每个点的位置,但我不确定如何检查它是否在一条线上。有什么想法吗?

提前致谢!!

2 个答案:

答案 0 :(得分:0)

按x坐标和y坐标对所有点进行排序。如果每个点都在水平线或垂直线上,则这些线中至少有一条线必须覆盖至少一半的点,并且不能有两条以上的水平线,或者像这样的两条以上的垂直线,因为你不能有两条以上的水平线,每条水平线都有一半的点。

因此,通过按x坐标排序并在同一个x坐标上查找许多点,您最多有两个垂直线候选者,并且通过y坐标排序最多两个水平线候选者。对于这些(最多四个)候选线中的每一个,查看不适合该线的所有点并查看它们的y坐标(或x坐标)以查看它们是否都适合其他类型的线。如果他们这样做,你就完成了。如果没有,请尝试最多三种其他可能性。

答案 1 :(得分:0)

您按顺序遍历每个点并比较它们的坐标,因为它们必须共享相同的x分量(横坐标),y分量(纵坐标)或两者。您的目标是确定这些值,然后检查所有点是否至少包含其中一个。

  • 第一个点可能有一个或两个正确,因此您将两个组件保持为潜在的正确值,

  • 第二个点应该与第一个点至少有一个共同点,因此将公共分量标记为水平(对于x)或垂直行(对于y)的正确分量。

  • 你循环下一个点,直到它们共享你刚刚在前两个点之间找到的那个相同的组件,如果你发现一个点不在该线上,那么它必须属于另一方面,你已经发现了第二个正确的组件,

  • 现在检查所有剩余的点l,如果其中一个没有任何一个组件,则结果为false。