【问题标题】:Distance to convex hull from point in 3d in PythonPython中从3d点到凸包的距离
【发布时间】:2019-08-22 21:58:06
【问题描述】:

我正在寻找 Python 中 3D 中点到 ConvexHull 对象的距离。

我找到了解决 2D 问题的问题: Distance to convexHullComputing the distance to a convex hull

但那些不包含 3D 的解决方案。

import numpy as np
from scipy.spatial import ConvexHull

mat = np.random.rand(100,3)
hull = ConvexHull(mat)
points = np.random.rand(10,3)

有功能就好了

dist(hull,points)

返回从点到凸包的距离列表,对于凸包内部和外部的点具有不同的符号。

【问题讨论】:

  • Distance to convexHull的可能重复
  • @meowgoesthedog 我引用了另一个问题并澄清:我需要一个 3d 解决方案,而那个解决方案只提供 2d。

标签: python 3d distance convex-hull


【解决方案1】:

我们可以为此使用PyGEL 3d python 库。

首先,用pip install PyGEL3D安装它

二、代码:

import numpy as np
from scipy.spatial import ConvexHull
from PyGEL3D import gel

mat = np.random.rand(100, 3)
hull = ConvexHull(mat)
points = np.random.rand(10, 3)

def dist(hull, points):
    # Construct PyGEL Manifold from the convex hull
    m = gel.Manifold()
    for s in hull.simplices:
        m.add_face(hull.points[s])

    dist = gel.MeshDistance(m)
    res = []
    for p in points:
        # Get the distance to the point
        # But don't trust its sign, because of possible
        # wrong orientation of mesh face
        d = dist.signed_distance(p)

        # Correct the sign with ray inside test
        if dist.ray_inside_test(p):
            if d > 0:
                d *= -1
        else:
            if d < 0:
                d *= -1
        res.append(d)
    return np.array(res)

print(dist(hull, points))

【讨论】:

    【解决方案2】:
    from scipy.spatial import distance_matrix, distance
    import numpy as np
    #point from which distance is to be calculated
    reference_point = np.array([1.28442705, 6.75384521e-01, 9.99999997e-07]).reshape(1,3)
    
    #any point/points from convexhull
    p = np.array([[1.2844270500,6.75384521e01,9.9999999707], 
    [1.2743135700,7.84526169e01,9.9999999707],[1.2844270500,6.7538452101,8.7603122001]]) 
    
    distance_matrix = distance.cdist(reference_point, p, 'euclidean')
    

    【讨论】:

    • 这不是距离度量,其符号取决于参考点是在凸包内部还是外部。此外,“点到凸包的距离”意味着一个数字:最短距离。
    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 2020-12-21
    • 2017-04-21
    • 2017-02-24
    • 2019-03-18
    • 2011-07-03
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多