我需要一个八面体内的随机点,并且分布均匀。我将八面体定义为所有点都满足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:...