Pokoloruj region

Sep 04 2020

Moje poszukiwania do niczego nie doprowadziły do ​​tego.

Mam MeshRegion(powiedzmy, rozmaitość 2D osadzoną w 3D) i chciałbym wykreślić na niej funkcję: taką, że kolor punktu w (x, y, z) jest określony funkcją współrzędnych.

Znalazłem MeshCellStyle, co pozwala mi określić płaski kolor dla komórki, ale daje dostęp do współrzędnych dla pełnego ColorFunctionstylu. Jest też coś RegionPlot3D, co może działać (używając (x,y,z) ∈ ℛ) dla pełnowymiarowej podrozmaitości, ale kiedy przepuszczany jest obiekt o niższych wymiarach osadzony w 3D, algorytm próbkowania nigdy nie trafia.

Odpowiedzi

9 kglr Sep 04 2020 at 17:13

Możesz wyodrębnić współrzędne siatki i wielokąty MeshRegioni użyć ich do skonstruowania GraphicsComplexz VertexColors.

Na przykład:

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]

Użyj, VertexColors -> (Opacity[.7, Hue[f@##]] & @@@ Rescale[mc])aby dostać