在Python中使用poisson采样对立方体表面上的3D点(X、Y、Z)进行采样

2024-09-24 12:35:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中对立方体的面执行Poisson采样。在

我对python不熟悉,所以我在平面上发现了Poisson采样的这个实现 https://github.com/IHautaI/poisson-disc/blob/master/poisson_disc.py

这就是我想到的:

    import numpy as np
    import random
    nPoints = 100
    r = 1/np.sqrt(nPoints/6)
    length = 1
    width = 1
    grid = Grid(r, length, width)
    rand = (random.uniform(0, length), random.uniform(0, width))
    PointsBottom = np.array([list(elem) for elem in grid.poisson(rand)])
    Pointstop = np.array([list(elem) for elem in grid.poisson(rand)])
    PointsRight = np.array([list(elem) for elem in grid.poisson(rand)])
    PointsLeft = np.array([list(elem) for elem in grid.poisson(rand)])
    PointsFront = np.array([list(elem) for elem in grid.poisson(rand)])
    PointsBack = np.array([list(elem) for elem in grid.poisson(rand)])
    X = np.concatenate([PointsBottom[:, 0], Pointstop[:, 0], PointsLeft[:, 0], PointsRight[:, 0], np.zeros(len(PointsFront[:, 0])), np.ones(len(PointsBack[:, 0]))])
    Y = np.concatenate([PointsBottom[:, 1], Pointstop[:, 1], np.zeros(len(PointsLeft[:, 0])), np.ones(len(PointsRight[:, 0])), PointsFront[:, 0], PointsBack[:, 0]])
    Z = np.concatenate([np.zeros(len(PointsBottom[:, 0])), np.ones(len(Pointstop[:, 0])), PointsLeft[:, 1], PointsRight[:, 1], PointsFront[:, 1], PointsBack[:, 1]])

它工作得很好。我的问题是-有没有更好/更有效的方法来做到这一点?在


Tags: inforlennparraylistgridpoisson