Плохая автоматическая триангуляция с Mayavi для окраски поверхности, известной только ее углом

Я пытаюсь окрасить поверхность, известную только своим углом в соответствии с ее значением Y с Mayavi. Оригинал, II удается сделать то же самое с matplotlib ( здесь ), но я вернул эту каноническую информацию на мои настоящие данные, рендеринга было недостаточно, и поэтому я сейчас пытаюсь с Mayavi. Я нашел пример из Surface из примера нерегулярных данных, что весьма полезно. Однако при применении к моему делу, воспроизведя здесь в этом простом случае, триангуляция становится неправильной, как видно на рисунке ниже для левой поверхности, с двумя нижними треугольниками вместо верхнего и нижнего треугольников, как для правой поверхности.

введите описание изображения здесь

Я полагаю, что он исходил из положения вторых Y-вершин, однако я хочу найти более общее решение: 1) избежать этой противоправной триангуляции и 2) иметь более гладкую поверхность, интерполируя между каждым углом, как в предыдущей статье и избегайте, насколько это возможно, складки, видимой на правой поверхности, из-за расщепления моей поверхности только в двух треугольниках. Есть идеи о том, как это сделать с Mayavi?

Вот код, который я использовал для создания этого простого примера:

#!/usr/bin/env python #-*- coding: utf-8 -*- import numpy from mayavi import mlab X1 = numpy.array([0, 0, 1, 1]) Y1 = numpy.array([0.5, 0.75, 1, 0.5]) Z1 = numpy.array([0, 1, 0.5,0]) X2 = numpy.array([0, 0, 1, 1]) Y2 = numpy.array([-0.5, -0.45, -1, -0.5]) Z2 = numpy.array([0, 1, 0.5,0]) fig = mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5)) # Building the working triangulation # Define the points in 3D space # including color code based on Z coordinate. pts = mlab.points3d(X1, Y1, Z1, Y1, colormap='jet') # Triangulate based on X, Y with Delaunay 2D algorithm. # Save resulting triangulation. mesh = mlab.pipeline.delaunay2d(pts) # Remove the point representation from the plot pts.remove() # Draw a surface based on the triangulation surf = mlab.pipeline.surface(mesh, colormap='jet') # Building the buggus triangulation pts = mlab.points3d(X2, Y2, Z2, Y2, colormap='jet') # Triangulate based on X, Y with Delaunay 2D algorithm. # Save resulting triangulation. mesh = mlab.pipeline.delaunay2d(pts) # Remove the point representation from the plot pts.remove() # Draw a surface based on the triangulation surf = mlab.pipeline.surface(mesh, colormap='jet') # Simple plot. mlab.outline(extent=(0,1,-1,1,0,1)) mlab.axes(extent=(0,1,-1,1,0,1), nb_labels=3) mlab.show() 

2 Solutions collect form web for “Плохая автоматическая триангуляция с Mayavi для окраски поверхности, известной только ее углом”

Вы используете разные arrays по сравнению с вашим примером matplotlib.

Пример matplotlib:

  z = numpy.array([0, **0.5, 1,** 0]) 

Вот:

  Z1 = numpy.array([0, **1, 0.5**,0]) 

С правильным z массивом график похож на ваш пример matplotlib, включая интерполяцию, чтобы добиться более плавного перехода цвета.

Функция mlab.pipeline.delaunay2d вычисляет двумерную триангуляцию mlab.pipeline.delaunay2d множества точек. Это означает, что созданные треугольники зависят только от координат X и Y точек, игнорируют Z.

Насколько я понял, две триангуляции, которые вы получаете, являются ожидаемыми. Возможно, в вашем втором наборе данных была опечатка, и это объясняет, почему вы удивлены. Вы имели в виду следующее?

 X2 = numpy.array([0, 0, 1, 1]) Y2 = numpy.array([-0.5, -0.75, -1, -0.5]) Z2 = numpy.array([0, 1, 0.5,0]) 

Разница заключается в второй координате Y2 которая равна -0.75 вместо -0.45 .

  • Использование Mayavi для создания 3D-графиков с осями типа Matplotlib
  • ValueError: невозможно установить набор инструментов для wx, поскольку он уже установлен на qt4
  • майави в питоне Анаконда
  • Mayavi не работает из Spyder: жалуется на «ValueError: API QString» ... »
  • аннотирование многих точек текста в майави с использованием mlab
  • установка Mayavi с помощью pip - нет модуля с именем vtk
  • Функция построения трех измерений по заданной области с помощью matplotlib
  • Mayavi points3d с разным размером и цветами
  • Сохранение нескольких изображений в MayaVi
  • mayavi mlab.savefig () дает пустое изображение
  • Укажите абсолютный цвет для 3D-точек в MayaVi
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.