У меня есть точка в трехмерном пространстве, source_point
, и я хочу вычислить расстояние от этой точки до Центра тяжести всех близлежащих объектов, которые PolyData
и были построены с помощью VTK. большинство из этих объектов являются цилиндрами. Первым решением, которое мне пришло в голову, было приведение лучей от моего source_point
ко ВСЕМ из этих полиданных, а затем вычисление среднего расстояния, но это совсем не практично, поскольку у меня есть миллионы этих объектов вокруг моего source_point
, ТАКЖЕ янужно только вычислить близлежащее расстояние, а не все из них, поэтому, используя nearby_radius
, я хочу вычислить расстояние до этих PolyData
, которые лежат внутри сферы с заданным радиусом (nearby_radius
).
В порядкеДля этого я сначала попытался использовать vtkBooleanOperationPolyDataFilter
и использовать Union
-операцию, чтобы отделить объекты внутри сферы от других, но это не помогло.
Затем я попытался использовать vtkOBBTree
, но вместовыбрав PolyData
в качестве DataSet
, я попытался создать сферу с nearby_radius
в качестве радиуса, используя vtkSphereSource
, но проблема в том, что я не могу извлечь PolyData
внутри сферы.
Вот мой код для ray_casting для PolyData
:
def ray_cast_polydata(polydata, p_source, p_target):
obbtree = vtk.vtkOBBTree()
obbtree.SetDataSet(polydata)
obbtree.BuildLocator()
pointsVTKIntersection = vtk.vtkPoints()
code = obbtree.IntersectWithLine(p_source, p_target, pointsVTKIntersection, None)
# Extracting data
pointsVTKIntersectionData = pointsVTKIntersection.GetData()
noPointsVTKIntersection = pointsVTKIntersectionData.GetNumberOfTuples()
pointsIntersection = []
for idx in range(noPointsVTKIntersection):
_tup = pointsVTKIntersectionData.GetTuple3(idx)
pointsIntersection.append(_tup)
return code, pointsIntersection, noPointsVTKIntersection
Вот упрощенная иллюстрация того, что я пытаюсь сделать, желтая сфера и ее внутренние объекты - это то, что я пытаюсь вычислитьгistance.
Буду признателен за любые комментарии и советы от вас, ребята.