在具有边界的空间(x,y,z)中生成一个随机点

2024-05-23 16:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有人能给我一个可以使用的算法吗?在

谢谢!在


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


Tags: 算法定义情况边界顶点四面体框内
1条回答
网友
1楼 · 发布于 2024-05-23 16:13:50

在你的问题中有很多没有明确的地方,比如你想用什么样的发行版。为了得到这个答案,我假设是均匀分布的。在

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

如果这是不够的,由于它的非恒定性能或其他任何原因,你将需要约束你的问题(比如说,只有四面体)和做一堆微积分来计算必要的随机分布和模型之间的依赖轴。在

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

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

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


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

  • 对于每个多边形面:
    • 计算其特征平面。
      • 使用叉积计算平面法线。在
      • 面和平面法线的一个顶点足以定义平面。在
      • 记住右手边的规则,选择点,使平面法线一致地指向多面体。在
    • 检查随机点是否位于该平面的“内部”半空间上。
      • 半空间是平面一侧所有点的集合。在
      • 计算从平面顶点到随机点的向量。在
      • 计算平面法线和这个向量之间的点积。在
  • 如果将平面法线定义为指向多面体,则所有点积必须为负。在
  • 如果定义平面法线指向多面体,则所有点积必须为正。在

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

可能有更好的算法在那里,他们的讨论超出了这个问题和答案的范围。这个算法是我不需要研究就可以想出的,而且可能和气泡排序一样好。在

相关问题 更多 >