簡體   English   中英

如何均勻地填充由 3d 點列表給出的凸包的體積?

[英]How to uniformly fill a volume of a convexHull given by a list of 3d points?

我有一個由scipy.spatial.ConvexHull生成的 3d 點列表給出的凸包

我希望整個體積以某種有效的方式均勻地填充 3d 點。

如果我有一種快速的方法知道一個點是在凸包內部還是外部,我可能會以某種分辨率對每個體素進行矢量化,如果它在“內部”則返回其中心,或者如果它是“外部”。


例子:

對於 2d 點,就像在 scipy 的 ConvexHull 示例中一樣,

scipy 的例子

我想計算一個在紅線內均勻分布的點列表。

如何才能更有效地做到這一點?

這是一些(未優化的)示例代碼,演示了.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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM