使用边界在空间(x,y,z)中生成随机点

时间:2014-11-28 16:11:42

标签: python random spatial coordinate

我想生成一个均匀随机坐标,该坐标位于由(至少)4个顶点定义的凸边界框内(对于四面体的情况)。

有人可以建议我可以使用的算法吗?

谢谢!


如果在边界框中生成一个点,您如何检测它是否在几何体之外但在框内?

1 个答案:

答案 0 :(得分:3)

您的问题中有很多未指定的内容,例如您要使用的分发版。为了这个答案,我将假设一个统一的分布。

处理任意体积均匀分布的直接方法是选择三个均匀随机数作为包围体积的边界直线实体范围内的坐标,然后检查所选坐标是否位于体积内。如果坐标不在卷内,则丢弃它并生成一个新坐标。

如果这还不够,由于其不稳定的性能或其他原因,你需要约束你的问题(比如说只有四面体)并做一堆微积分来计算必要的随机分布并模拟轴之间的依赖关系。

例如,您可以从x轴开始,并在体积和x = t的平面之间积分相交形状的面积。这将给你一个函数p(x),当归一化时,它是沿X轴的概率密度函数。 (如果你想要非均匀分布,你也需要把它放在集成函数中。)

然后你需要做另一组积分来确定p(y | x0),给定所选x坐标的Y轴上的概率分布函数。最后,您需要确定z(z轴)上的概率分布函数p(z | x0,y0)。

一旦你拥有了这一切,你需要使用任何随机数算法来选择这些分布中的随机数:首先从p(x)中选择x0,然后用它从p(y | x0)中选择y0,然后用它们从p(z | x0,y0)中选择z0,你就得到了你的结果(x0,y0,z0)。


有多种算法可以确定某个点是否在卷外,但是一个简单的算法可能是:

  • 对于每个多边形面:
    • 计算其特征平面。
      • 使用叉积来计算平面法线。
      • 面的一个顶点和平面法线足以定义平面。
      • 记住右手定则并选择点,使平面法线始终指向多面体或从多面体中指出。
    • 检查随机点位于"内部"那架飞机的半空间。
      • 半空间是飞机一侧所有点的集合。
      • 计算从平面顶点到随机点的矢量。
      • 计算平面法线与此向量之间的点积。
  • 如果您将平面法线定义为指出多面体,那么所有点产品必须为负数。
  • 如果您将平面法线定义为指向多面体,那么所有点产品必须为正。

请注意,您只需在音量移动时重新计算特征平面,而不是每个随机点。

可能有更好的算法,他们的讨论超出了这个问题和答案的范围。这个算法是我没有研究就能想到的,并且可能和冒泡一样好。