Замкнутая поверхность Maya из 3d точек

У меня есть большой набор трехмерных точек (200 тыс.), которые моделируют объект, который я рисую с помощью plot3d(). Хотя программа не падает и все еще работает, она медленно перемещается. Существуют ли какие-либо встроенные способы, которыми я могу отображать только видимые точки? Или, что еще лучше, создать поверхность над внешними точками?

Я читал, что один из способов ускорить это — создать один объект VTK со всеми точками в нем, а не по одному объекту на точку.

x,y,z,_,s = zip(*voxels)

print len(x) # 180k
points3d(x, y, z,s,scale_factor=0.8)
show()

person chris    schedule 15.05.2015    source источник
comment
Можете ли вы привести пример вашего текущего исходного кода?   -  person jrsm    schedule 16.05.2015
comment
я поставил то, что я считал уместным   -  person chris    schedule 16.05.2015


Ответы (1)


Что ж, это может быть решением, в зависимости от того, как выглядят ваши данные.
Вы можете вычислить сложную оболочку вашего набора точек, т.е.:

import numpy as np

from mayavi import mlab
from scipy.spatial import ConvexHull

x = np.random.rand(200000)
y = np.random.rand(200000)
z = np.random.rand(200000)
points = np.column_stack((x, y, z))

ch = ConvexHull(points)
hull_ids = ch.vertices

mlab.points3d(x[hull_ids], y[hull_ids], z[hull_ids])
mlab.show()

Альтернативой может быть вычисление альфа-формы с использованием функции Делоне. Это очень хорошо объяснено здесь, например: http://sgillies.net/blog/1155/the-fading-shape-of-alpha/

person jrsm    schedule 16.05.2015