Kolorieren Sie eine Region

Sep 04 2020

Meine Recherchen haben zu diesem Thema nirgendwo geführt.

Ich habe eine MeshRegion(z. B. eine in 3D eingebettete 2D-Mannigfaltigkeit) und möchte eine Funktion darauf zeichnen: so, dass die Farbe eines Punktes bei (x, y, z) durch eine Funktion der Koordinaten bestimmt wird.

Ich habe festgestellt MeshCellStyle, dass ich eine flache Farbe pro Zelle angeben kann, aber Zugriff auf Koordinaten für einen ColorFunctionVollstil habe. Es gibt auch Funktionen RegionPlot3D, die (x,y,z) ∈ ℛfür eine volldimensionale Untervielfalt funktionieren (verwenden ), aber wenn ein in 3D eingebettetes Objekt mit niedrigerer Dimension übergeben wird, trifft der Abtastalgorithmus niemals.

Antworten

9 kglr Sep 04 2020 at 17:13

Sie können Ihre Netzkoordinaten und Polygone extrahieren und daraus MeshRegioneine GraphicsComplexmit konstruieren VertexColors.

Beispielsweise:

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]

Verwenden Sie VertexColors -> (Opacity[.7, Hue[f@##]] & @@@ Rescale[mc]), um zu bekommen