Colorear una región

Sep 04 2020

Mis búsquedas no han llevado a ninguna parte en este caso.

Tengo un MeshRegion(digamos, un colector 2D incrustado en 3D) y me gustaría trazar una función en él: tal que el color de un punto en (x, y, z) esté determinado por una función de las coordenadas.

He encontrado MeshCellStyle, lo que me permite especificar un color plano por celda, pero da acceso a las coordenadas para un ColorFunctionestilo completo . También hay RegionPlot3D, que podría funcionar (usar (x,y,z) ∈ ℛ) para un sub-colector de dimensión completa, pero cuando se pasa un objeto de menor dimensión incrustado en 3D, el algoritmo de muestreo nunca llega.

Respuestas

9 kglr Sep 04 2020 at 17:13

Puede extraer sus coordenadas y polígonos de malla MeshRegiony usarlos para construir un archivo GraphicsComplexcon VertexColors.

Por ejemplo:

mreg = DiscretizeRegion[
       ImplicitRegion[-3 y - 4 x y^2 + 4 x z^2 + 4 x^2 z + 2 y^2 z^2 + z^3 == 0, 
         {x, y, z}],  MaxCellMeasure -> .001]

mc = MeshCoordinates[mreg];

polys = MeshCells[mreg, 2];

f[x_, y_, z_] := x y + z; 

Graphics3D[{EdgeForm[], 
  GraphicsComplex[mc, polys, VertexColors -> (Hue[f@##] & @@@ Rescale[mc])]}, 
  Boxed -> False]

Utilizar VertexColors -> (Opacity[.7, Hue[f@##]] & @@@ Rescale[mc])para conseguir