JavaScript球面上均匀分布的点

JavaScript球面上均匀分布的点

步骤:

  1. 随机抽样产生一对均匀分布的随机数 u ,v ;这里u,v 在[-1,1] 范围内
  2. 计算 r = u*u + v*v;
    如果 r > 1 则重新抽样,直到满足 r < 1 .
  3. 计算  
     x=2*u*sqrt(1-r);
     y=2*v*sqrt(1-r);
     z=1-2*r;

代码:

 private spherical(k) {
     let u = Math.random() * 2 - 1;
     let v = Math.random() * 2 - 1;
     let r = Math.pow(u, 2) + Math.pow(v, 2);

     while (r > 1) {
         u = Math.random() * 2 - 1;
         v = Math.random() * 2 - 1;
         r = Math.pow(u, 2) + Math.pow(v, 2);
     }

     let x = 2 * u * Math.sqrt(1 - r);
     let y = 2 * v * Math.sqrt(1 - r);
     let z = 1 - 2 * r;

     return { x: k * x, y: k * y, z: k * z };
 }

100个点
JavaScript球面上均匀分布的点_第1张图片

10000个点
JavaScript球面上均匀分布的点_第2张图片

参考文章:https://www.cnblogs.com/cofludy/p/5894270.html

你可能感兴趣的:(编程开发)