Python 在具有边界的空间(x、y、z)中生成随机点

Python 在具有边界的空间(x、y、z)中生成随机点,python,random,spatial,coordinate,Python,Random,Spatial,Coordinate,我想生成一个统一的随机坐标,它位于由(至少)4个顶点(对于四面体)定义的凸边界框内 有人能推荐一个我可以使用的算法吗 谢谢 如果一个点是在边界框中生成的,如何检测它是否在几何体之外而在框内?在您的问题中有很多未指定的内容,例如您想要使用什么分布。为了得到这个答案,我将假设一个均匀分布 处理任意体积均匀分布的简单方法是选择三个均匀随机数作为包围体积的边界直线实体范围内的坐标,然后检查所选坐标是否位于体积内。如果坐标不在体积内,请放弃该坐标并生成一个新坐标 如果这是不够的,由于它的非恒定性能或任何

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

有人能推荐一个我可以使用的算法吗

谢谢



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

在您的问题中有很多未指定的内容,例如您想要使用什么分布。为了得到这个答案,我将假设一个均匀分布

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

如果这是不够的,由于它的非恒定性能或任何其他原因,您将需要约束您的问题(例如,仅限于四面体),并进行一系列演算来计算必要的随机分布,并对轴之间的依赖关系建模

例如,可以从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)


有多种算法可以确定点是否位于体积之外,但简单的算法可以是:

  • 对于每个多边形面:
    • 计算其特征平面。
      • 使用叉积计算平面法线
      • 面的一个顶点和平面法线足以定义平面
      • 记住右手法则并选择点,以便平面法线始终指向或指向多面体
    • 检查随机点是否位于该平面的“内部”半空间上。
      • 半空间是平面一侧上所有点的集合
      • 计算从平面顶点到随机点的向量
      • 计算平面法线和该向量之间的点积
  • 如果定义平面法线指向多面体之外,则所有点积都必须为负
  • 如果定义了指向多面体的平面法线,则所有点积都必须为正
请注意,仅当体积移动时才需要重新计算特征平面,而不是针对每个随机点


可能还有更好的算法,它们的讨论超出了这个问答的范围。这个算法是我不用研究就能想到的,可能和冒泡排序一样好。

在你的问题中有很多未明确的地方,比如你想要使用什么分布。为了得到这个答案,我将假设一个均匀分布

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

如果这是不够的,由于它的非恒定性能或任何其他原因,您将需要约束您的问题(例如,仅限于四面体),并进行一系列演算来计算必要的随机分布,并对轴之间的依赖关系建模

例如,可以从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)


有多种算法可以确定点是否位于体积之外,但简单的算法可以是:

  • 对于每个多边形面:
    • 计算其特征平面。
      • 使用叉积计算平面法线
      • 面的一个顶点和平面法线足以定义平面
      • 记住右手法则并选择点,以便平面法线始终指向或指向多面体
    • 检查随机点是否位于该平面的“内部”半空间上。
      • 半空间是平面一侧上所有点的集合
      • 计算从平面顶点到随机点的向量
      • 计算平面法线和t之间的点积