python - 如何均匀填充由3d点列表给出的convexHull的体积?
问题描述
我有一个由 scipy.spatial.ConvexHull 生成的3d点列表给出的convexHull。
我希望整个体积以某种有效的方式均匀地填充 3d 点。
如果我有一种快速的方法来知道一个点是在凸包内部还是外部,我可能会以某种分辨率对每个体素进行矢量化处理,如果它在“内部”则返回它的中心,或者如果它是“不返回任何体素”外部”。
例子:
对于 2d 点,就像在 scipy 的 ConvexHull 示例中一样,
我想计算一个在红线内均匀分布的点列表。
怎样才能相当有效地做到这一点?
解决方案
这是一些(未优化的)示例代码,演示了.equations
包含凸包表面法线的属性的使用。
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 = (outline.equations@np.c_[samples, np.ones(len(samples))].T > eps).any(0)
inside = (outline.equations@np.c_[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()
推荐阅读
- visual-studio-mac - 你如何在 Visual Studio 2017 社区中查看 MAC 的完整错误
- javascript - 我可以让它只在某个变量为真时才执行点击事件吗?
- python - Python使用空格sep从csv读取数据,第一列除外
- azure-machine-learning-workbench - 在本地运行 Azure 机器学习服务管道
- macos - 如何从命令行在 Mac 上运行 MSTest 单元测试?
- javascript - 如何将多个类属性设置为一个对象的属性
- r - (R) 将文本添加到字符串值的 for 循环不起作用
- foreign-keys - 用于在线学生监控系统的 Mysql 数据库设计的数据库错误
- r - 如何在 for 循环中为数据框分配名称?在 R 中
- angular - 如何重新加载/刷新动态注入的组件Angular 6