首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个随机产生的球面点云不均匀分布?

为什么这个随机产生的球面点云不均匀分布?
EN

Stack Overflow用户
提问于 2020-06-04 16:27:53
回答 1查看 385关注 0票数 0

我试着模拟点源发出的辐射。为了做到这一点,给定源的坐标和所需的发射射线长度,我在球面坐标中随机生成一个方向矢量,将其转换为笛卡儿,并返回正确的端点。但是,当我运行这个程序,并在Blender中可视化产生的点云(由所有随机生成的端点组成)时,我看到它在球体的“极点”上更密集。我希望这些点沿球体均匀分布。我怎样才能做到这一点?

随机生成函数:

代码语言:javascript
复制
def getRadiationEmissionLineSeg(p, t):
    if(p.size == 4):
        #polar angle spans [0, pi] from +Z axis to -Z axis
        #azimuthal angle spans [0, 2*pi] orthogonal to the zenith (in the XY plane)
        theta = math.pi * random.random()
        phi = 2 * math.pi * random.random()

        #use r = 1 to get a unit direction vector
        v = sphericalToCartesian(1, theta, phi)

        #parametric vector form: vec = p + tv
        #p = point that lies on vector (origin point in case of a ray)
        #t = parameter (-inf, inf) for lines, [0, inf) for rays
        #v = direction vector (must be normalized)
        return p + t * v

球面坐标->笛卡尔变换函数:

代码语言:javascript
复制
def sphericalToCartesian(r, theta, phi):

    x = r * math.sin(theta) * math.cos(phi)
    y = r * math.sin(theta) * math.sin(phi)
    z = r * math.cos(theta)

    return npy.array([x, y, z, 0])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 16:45:51

当你用球面坐标变换点,角θ接近π时,0,2 pi { theta }的图像的圆变得越来越小。由于θ是均匀分布的,在极附近会有更多的点。它可以在网格图像上看到。

如果你想在球面上产生均匀分布的点,你可以利用这样一个事实:如果你切割一个有两个平行平面的球,那么两面之间的球面条的面积只取决于两平面之间的距离。因此,可以使用两个均匀分布的随机变量在球面上得到均匀分布:

  • z坐标-r与r,
  • 对应于经度的[0,2pi]之间的角θ。

然后你可以很容易地计算出x和y的坐标。

示例代码:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

r = 1
n = 1000

z = np.random.random(n)*2*r - r
phi = np.random.random(n)*2*np.pi

x = np.sqrt(1 - z**2)*np.cos(phi)
y = np.sqrt(1 - z**2)*np.sin(phi)

fig = plt.figure(figsize=(8, 8))
ax = plt.axes(projection='3d')
ax.scatter(x, y, z)
plt.show()

n=100,250,1000结果

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62199614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档