关于如何找到三个点的算法

时间:2017-03-16 04:31:44

标签: algorithm

给定一组名为S的点和一个点P.如何在集合S中找到三个点,这三个点可以形成三角形T而P是三角形T,时间复杂度最低?

任何编程语言都可以。伪代码就好了。

致谢谢谢!

2 个答案:

答案 0 :(得分:2)

在三角形内绘制一个点,并从点到角绘制线条。您应该看到这些线之间的角度都小于180度,并且当点移动到三角形之外时,线之间的一个角度在穿过三角形的一侧时达到180度。

因此,如果您将点视为在地图上,请将指南针从P带到其他每个点,然后对结果进行排序。如果在排序值之间存在大于或等于180度的间隙(包括从360到0的环绕),则P不在任何三角形内。

假设测试通过,考虑根据圆弧上的罗盘方位布置的所有点,并选择一个任意点,并在该点绘制直径,将其分成两部分。在该直径的任一侧必须有其他点,或者我们将有180的间隙。从任意点最远的每一半中选取两个点。如果它们相距> 180度,则我们有180度的间隙。如果不是,所有点都在180度之内,我们有三个点包围原点。

这是O(n log n)的复杂性,这对我来说似乎是合理的,但不一定是平均情况最快,尽管我怀疑它的最坏情况是合理的。根据您的数据及其呈现方式,可能会有加速,包括首先随机选取少量点,希望它们包含一个包含P的三角形。

答案 1 :(得分:0)

  • 遍历元素集
  • 选择三个点a,b,c
  • 检查所有点是否位于同一行
  • 如果他们不在同一条线上,那么它们可以形成一个三角形
  • 现在点p
  • 计算三角形ABC,PAB,PBC,PAC
  • 的面积
  • 检查ABC = PAB + PBC + PAC
  • 的区域
  • 如果它们相等,则P位于ABC三角形内。