如何均匀填充由3d点列表给定的凸壳的体积?

问题描述 投票:0回答:1

我有一个由scipy.spatial.ConvexHull生成的3d点列表给出的凸包。

我希望整个体积以某种有效的方式均匀地填充3d点。

如果我有一种快速的方法来知道某个点是在凸面壳内还是在凸壳外,我可以向量化以某种分辨率遍历每个体素,如果在“内部”则返回其中心,或者如果该体素在其中则不返回任何内容是“外部”。


示例:

对于2d点,例如scipy的ConvexHull示例,

scipy's example

我想计算在红线内均匀分布的点的列表。

如何有效地做到这一点?

python numpy scipy convex-hull
1个回答
0
投票

这里有一些(未优化的)示例代码演示了.equations属性的使用,该属性包含凸包的表面法线。

enter image description here

import numpy as np
from scipy import spatial

## set up example ##
# create sample points
np.random.seed(17)
samples = np.random.uniform(-5,5,(100,2))
# pick convex subset
outline = samples[(samples**2).sum(1)<4]
outline = spatial.ConvexHull(outline)
# choose tolerance for detection of boundary points
eps = 1e-9

## classify ##
outside = ([email protected]_[samples, np.ones(len(samples))].T > eps).any(0)
inside = ([email protected]_[samples, np.ones(len(samples))].T < -eps).all(0)
boundary = ~(outside|inside)

## plot ##
import pylab
closed = np.tile(outline.points[outline.vertices],(2,1))
closed = closed[:len(closed)//2+1]
pylab.plot(*closed.T,'b')
pylab.plot(*samples[outside].T,'og')
pylab.plot(*samples[inside].T,'or')
pylab.plot(*samples[boundary].T,'oy')
pylab.show()
© www.soinside.com 2019 - 2024. All rights reserved.