Three.js:将较小的物体放在较大球体的随机位置上

Phi*_*sen 0 three.js

在Three.js(使用JavaScript/WebGL)中,给定一个更大的球体 - 半径为200 - 如何在这个球体的随机外部位置放置一些较小的物体(球体,在我的情况下)?例如,想象球体是一个世界,并且在这个世界的地面上有随机位置的小球体.

谢谢!

alt*_*edq 5

我创建了一个GeometryUtils方法来获取网格上的随机点,你可以使用它:

https://github.com/mrdoob/three.js/blob/master/src/extras/GeometryUtils.js#L304

var points = THREE.GeometryUtils.randomPointsInGeometry( geometry, nPoints );
Run Code Online (Sandbox Code Playgroud)

它比特定于球体的解决方案更复杂,但它会为您提供始终在真实网格上的点(而不是在完美几何球体上的点,例如,如果您处理行星大小的网格,可能会关闭).

直接在网格上获得更精确点的另一种选择是在较大的球体上生成随机点,然后将它们射向球体中心.

虽然如果你不太关心精度,简单的几何方法就足够了.

BTW mrdoob的方法很好,但它应该有一个额外的步骤来拒绝长度> 1的向量(参见超立方体拒绝方法).

http://local.wasp.uwa.edu.au/~pbourke/geometry/spherepoints/

给定球体上的随机点

另请参见此处了解如何在球体上生成随机点的其他方法:

http://www.math.niu.edu/~rusin/known-math/96/sph.rand