2015-05-15 3 views
0

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

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

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

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

Вы можете привести пример своего текущего исходного кода? – jrsm

+0

Я ставлю то, что, по моему мнению, было актуальным – chris

ответ

0

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

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/

Смежные вопросы