Найти ближайшую к точке треугольную плоскость с помощью запроса cKDTree

#python #numpy #closest #kdtree

#python #numpy #ближайший #kdtree

Вопрос:

Я пытаюсь найти ближайшую треугольную плоскость к точке, используя cKDTree query .

Я уже знаю, как найти ближайшего соседа к точке. Пример:

 from scipy.spatial import cKDTree
import numpy as np

p1 = np.array([0, 0, 0])
p2 = np.array([[100, 100, 100],
               [670, 500, 890],
               [666, 456, 765]])

tuple_dist_neighbor = cKDTree(p2).query(p1)
print(tuple_dist_neighbor) # prints (173.20508075688772, 0)
 

Таким return образом, значение представляет собой кортеж расстояния до ближайшего соседа и индекса ближайшего соседа.

Теперь предположим, что у меня есть два треугольника, каждый из которых состоит из 3 точек. Пример:

 triangle1 = np.array([[0, 0, 0],
                      [0, 4, 0],
                      [4, 0, 4]])

triangle2 = np.array([[100, 100, 100],
                      [100, 140, 100],
                      [140, 100, 140]])

triangle_set = np.array([triangle1, triangle2])

point = np.array([10, 11, 12])
 

Итак, мне интересно, возможно ли найти ближайший треугольник к точке, используя cKDTree, как указано выше.

Треугольники, с которыми я имею дело, образуют сетку все вместе.

Рисунок 1: Сетка, сформированная из треугольников

И реальная проблема заключается в том, чтобы найти ближайший треугольник в этой сетке к точке.

Комментарии:

1. Имеют ли треугольники какое-либо отношение друг к другу? (т. Е. Образуют ли они сетку? Являются ли они выпуклой оболочкой или симплексами Делоне облака точек?) — если они произвольны, вам вроде как не повезло, и, вероятно, потребуется применить грубую силу.

2. Да, они делают. Я отредактировал свой пост.