【问题标题】:how to find a square in a given set of points?如何在给定的一组点中找到一个正方形?
【发布时间】:2014-10-12 10:43:02
【问题描述】:

在坐标平面中,给定一组点,比如 10 个点,为了简单起见,我们将它们视为整数。如何找出可能的正方形是否位于这 10 个点内?...如果不是,要在这些点集合中添加多少点才能拥有至少一个正方形?

【问题讨论】:

  • 嗯,最多需要添加两个点。
  • 如果只给1分,则必须加3分
  • 你刚才说有 10 分。
  • 如果语法正确,我用了“说”这个词....如果所有点都在同一个点上怎么办?
  • 那么他们已经形成了一个正方形。

标签: c++ geometry coordinates coordinate-systems


【解决方案1】:

只需使用蛮力。对于集合中的每个点,对于集合中每个可能的其他点,检查是否有两个点足够接近其他可能的方角。如果坐标是整数,那么这真的很简单(尽管具有二次复杂度,假设点查找的时间恒定),当浮点不太简单时可能会稍微复杂一些。

【讨论】:

  • 一种蛮力方法是计算“nC2”距离并进行比较,但这无助于我得出可能需要多少点。
  • @peterburke:是的。如果你找到一个正方形,答案是 0。如果你找到一个角,那么答案是 1。如果你没有找到角,那么答案是 2。
  • 您可以在 O(N) 复杂度中对与 X 轴形成 45* 角的共线点进行分组,并将这种蛮力优化到同一组中的点。话虽如此,对于同一组中的每两个点,只需检查在所需坐标处是否还有其他两个点缺失以形成正方形
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
相关资源
最近更新 更多