Mayavi: interpolar colores de cara en triangular_mesh

He juntado el siguiente código para trazar una malla triangular con los colores especificados por una función escalar adicional:

#! /usr/bin/env python import numpy as np from mayavi import mlab # Create cone n = 8 t = np.linspace(-np.pi, np.pi, n) z = np.exp(1j*t) x = z.real.copy() y = z.imag.copy() z = np.zeros_like(x) triangles = [(0, i, i+1) for i in range(n)] x = np.r_[0, x] y = np.r_[0, y] z = np.r_[1, z] t = np.r_[0, t] # These are the scalar values for each triangle f = np.mean(t[np.array(triangles)], axis=1) # Plot it mesh = mlab.triangular_mesh(x, y, z, triangles, representation='wireframe', opacity=0) cell_data = mesh.mlab_source.dataset.cell_data cell_data.scalars = f cell_data.scalars.name = 'Cell data' cell_data.update() mesh2 = mlab.pipeline.set_active_attribute(mesh, cell_scalars='Cell data') mlab.pipeline.surface(mesh2) mlab.show() 

Esto funciona razonablemente bien. Sin embargo, en lugar de tener cada triángulo con un color uniforme y transiciones agudas entre los triangularjs, prefiero tener una interpolación suave en toda la superficie.

¿Hay una manera de hacerlo?

Creo que quieres usar datos de puntos en lugar de datos de celdas. Con los datos de celda, un solo valor escalar no se localiza en ningún punto. Se asigna a toda la cara. Parece que solo desea asignar los datos t a los vértices. La representación predeterminada de los escalares de puntos se interpolará suavemente en cada cara.

 point_data = mesh.mlab_source.dataset.point_data point_data.scalars = t point_data.scalars.name = 'Point data' point_data.update() mesh2 = mlab.pipeline.set_active_attribute(mesh, point_scalars='Point data')