【问题标题】:Check if point inside random boxes检查点是否在随机框内
【发布时间】:2017-11-19 05:23:52
【问题描述】:

编辑:我已经找到了解决方案。如果您以后遇到这种情况并需要类似的东西,请随时与我联系。

--

您将如何检查给定坐标是否等于随机点,而不是在平面上生成随机点?还是在随机边界框内?

例如,您有一个具有整数坐标的平面。该平面以某种方式填充了随机边界框(使用公式而不是数据生成)。目标是检查给定的 (x, y) 是否在其中一个框内。

我可以找到很多关于如何生成随机点的参考资料,但对于以这种更向后的方式进行的参考资料不多(我猜你会称之为“功能性”?)。

我设法制作了一种算法,将平面分成 100x100 的正方形,每个正方形内都有一个随机放置的边界框。但是,是否有可能通过一种算法更有机地放置盒子?

编辑:这是我用于简单“100x100 网格内的随机点”的示例算法(从内存中,可能遗漏了一些东西):

// check if equal to a random point within the point's grid square
boolean isRandomCenter(x, y) {
    // offset relative to origin of grid square
    int offsetX = x mod 100
    int offsetY = y mod 100

    // any random seed will do
    int randomSeed = x * y

    // random position of point for this square
    int randomOffsetX = random(50, randomSeed)
    int randomOffsetY = random(50, randomSeed)

    if (offsetX == randomOffsetX && offsetY == randomOFfsetY)
        return true

    return false
}

【问题讨论】:

  • 您到底想知道什么?知道给定点 (x,y) 是否在边界框中的条件是什么?还是随机放置盒子的算法?
  • “有机地”:是一个您有自己理解的术语,我们不分享。关于“检查给定坐标是否等于随机点”的相同评论。请解释一下。
  • “有机”,而不是我描述的网格样式。一切都是整数,没有实数。我更喜欢不重叠。
  • 更好地解释问题比增加赏金更有可能得到好的答案。
  • What part needs explaining? 输入是什么?随机点/盒子从何而来? boxes 是四边形吗?矩形的?同向?需要考虑哪些资源需求?

标签: algorithm geometry


【解决方案1】:

好吧,我不知道我是否完全理解你的问题,但条件是知道给定点 M(x, y) 绘制在用两个轴 x 和 y 表示的二维欧几里得空间中是否在一个盒子内用两个对立点 A(xa, ya) 和 B(xb, yb) 表示非常简单。

让我们定义一个函数 isInsideTheBox(x, y, xa, ya, xb, yb) 如果 M 在盒子内则返回 true 否则返回 false

bool isInsideTheBox(int x, int y, int xa, int ya, int xb, int yb) 
{
    // We assume xa < xb and ya < yb
    return (x >= xa && x <= xb && y >= ya && y <= yb); 
}

【讨论】:

  • 是的,我知道如何检查您是否在给定点的框内。我的问题是可以使用哪种算法来生成一组有机的(非基于网格的)随机点,并检查您是否在该点上(或在一个盒子内,容易修改)。
  • @LegendLength 您可以理解我们的困惑,因为您的问题的标题是“检查点是否在随机框内”
【解决方案2】:

我正在回答这个问题:检查一个点是否在一个随机点之上。

如果坐标是真实的,则重叠的概率为零,问题实际上是无用的。所以我假设离散坐标。

如果问题涉及已绘制的随机点,唯一的方法是在绘制它们时记住某个容器中的随机点(数组、排序、列表、搜索树、哈希表)。

如果问题涉及可能在该位置绘制的点,则答案在整个域中为“真”(分布不为零)。您需要对域进行几何建模以执行点中点查询。


如果问题是关于伪随机点或准随机点,我认为没有捷径可走,你应该继续处理真正随机的情况(除非生成器真的很差)。

【讨论】:

  • 在我的示例算法中,它既决定点的位置,也检查您是否在点之一上。它适用于无限大的平面并且不存储任何数据。它可以很容易地修改为检查边界框,而不是落在确切的点上。但它仅限于每 100x100 方格一个。我想要一些更“有机”的东西,因为你可能有 5 个随机相邻的点,这使用网格方法是不可能的。
猜你喜欢
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
相关资源
最近更新 更多