Я только начинаю использовать майави в python и не слишком много знаю о программировании 3d-графики. Я хочу, чтобы построить вогнутую поверхность/объект, но когда я пытаюсь это выходит подключается так:построение вогнутых объектов с mayavi или vtk
вы не можете видеть на картинке, но она образована параллельными плоскостями (не то, что я намеревался либо)
, когда я пытаюсь построить структуру с этой формой:
Так вот что мне делать, чтобы получить очки и сюжет:
#extract the black in the image
x,y,z = np.where(quest == 0)
#make z1,z2 the right size(y*0) and value(+12)
z1 = y*0
z2 = y*0+12
x,y,z1,z2= np.atleast_2d(x,y,z1,z2)
#duplicate the shape at z1 and z2
x = np.concatenate((x,x))
y = np.concatenate((y,y))
z = np.concatenate((z1,z2))
#plot the mesh
mlab.mesh(x,y,z)
mlab.show()
Я заметил, что порядок ваших данных указывает на использование сетки, потому что он будет нарисовать линию из каждой последовательной точки.
Есть ли более простой способ сделать это, чтобы каким-то образом организовать мои баллы?
Также есть способ сделать форму заполнением области между точками?
Вся помощь ценится, спасибо
Followup Вопросы:
Есть ли лучший 3d библиотеки для питона, которая будет служить этой цели?
Я смотрю на это делать с ВТК, но та же проблема вырезания вогнутую часть знака вопроса, как это:
Гораздо больше кода для этого:
#create the points
points = vtk.vtkPoints()
for i, j in zip(x,y):
points.InsertNextPoint(i,j,0)
#create a polygon
polygon = vtk.vtkPolygon()
polygon.GetPointIds().SetNumberOfIds(len(x))
for i in range(len(x)):
polygon.GetPointIds().SetId(i,i)
#add it to a cell array
polygons = vtk.vtkCellArray()
polygons.InsertNextCell(polygon)
#make the poly data
polyData = vtk.vtkPolyData()
polyData.SetPoints(points)
polyData.SetPolys(polygons)
#set up the window
mapper = vtk.vtkPolyDataMapper()
mapper.SetInput(polyData
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
rWindow = vtk.vtkRenderWindow()
rWindow.AddRenderer(renderer)
rWindowInteractor = vtk.vtkRenderWindowInteractor()
rWindowInteractor.SetRenderWindow(rWindow)
renderer.AddActor(actor)
renderer.SetBackground(.5,.3,.31)
rWindow.Render()
rWindowInteractor.Start()
Нет ничего волшебного в выпуклости - сетка является сеткой, точно так же, как вы ее определяете. Кажется, вы получаете координаты черных пикселей ... то что? Как вы хотите, чтобы сетка определялась над этими точками? Вы должны указать это для VTK (при построении многоугольников), тогда он будет правильно нарисован. –