Плохая автоматическая триангуляция с 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 .

  • python: построение каркаса 3D-кубоида
  • Неявное уравнение и майяви
  • Mayavi не работает из Spyder: жалуется на «ValueError: API QString» ... »
  • Измените источники данных mlab quiver3d & surf без очистки фигуры в скриптах признаков
  • Добавление 4-й переменной в 3D-график в Python
  • Укажите абсолютный цвет для 3D-точек в MayaVi
  • Mayavi Mlab: рисование октаэдров
  • Ограничьте мышь Маяви на вращающуюся Землю вокруг своей оси
  •  
    Interesting Posts for Van-Lav

    Как совместить две серии панд, которые по-разному индексируются?

    питонический путь для осевого победителя-победителя в numpy

    Qt Stylesheets – как удалить мертвое пространство

    Сценарий Python для отображения списка пользователей и групп

    Написание расширения Python в Go (Golang)

    Замена значения NaN словом, когда NaN не повторяется в двух последовательных строках

    Пересечение переменного количества списков

    Python, __slots__, наследование и переменные класса ==> атрибут – только для чтения

    Относительные модули импорта из подпапки родительских папок

    Повторное подключение к устройству с помощью pySerial

    Что означает опция «-U» для установки pip -U

    Dataframe не отображается в Pycharm

    Осциллирующая скорость обработки в скрипте python с использованием pysam.TabixFile для комментирования показаний

    Python печатает строки unicode в массивах как символы, а не кодовые точки

    Конец поддержки для python 2.7?

    Python - лучший язык программирования в мире.