如何在八面体中生成随机点而不丢弃?

问题描述 投票:2回答:2

我需要一个八面体内的随机点,并且分布均匀。我将八面体定​​义为所有点都满足abs(x) + abs(y) + abs(z) <= 1的体积,其中绝对值给出绝对值。 IE:六个顶点中的每个顶点都在一个轴上,距0,0,0的距离为1。也许您可以将其称为单位八面体。

考虑到定义,我可以像这样天真的产生一个点:

val x: Double = nextDouble() // 0-1 range
val y = nextDouble(1.0 -x) // 1-x is upper bound, probably <1
val z = nextDouble(1.0 -(x+y))

问题是,这倾向于较小的y值和较小的z值。显然分布不均。同样清楚的是,所有这些点仅在八个象限之一中。

我避免使用discard方法,因为此函数将被调用很多,而且看来我应该比扔掉大多数要点还要好。

请注意,dual of the octahedron是立方体。因此,我暗示可能存在一个简单的函数,可以将立方体中的任何点转换为八面体内的点,但这只是我一直在探索的一种直觉。

我需要一个八面体内的随机点,并且分布均匀。我将八面体定​​义为所有点均满足abs(x)+ abs(y)+ abs(z)<= 1的体积,其中abs给出绝对值。 IE:...

math random 3d polyhedra
2个回答
0
投票

我们在-1和1之间的三个方向上选择随机数a,b,c]


0
投票

这里是想法-从D + 1中的Dirichlet distribution采样点,选择D点以使您在单形中统一

© www.soinside.com 2019 - 2024. All rights reserved.