MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Raising Contour Plot Graphics to 3D - II

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37289] Re: Raising Contour Plot Graphics to 3D - II
  • From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
  • Date: Tue, 22 Oct 2002 04:47:08 -0400 (EDT)
  • Organization: Universitaet Leipzig
  • References: <ap085r$c77$1@smc.vnet.net>
  • Reply-to: kuska at informatik.uni-leipzig.de
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

a) Mathematica can't render non convex polygons in 3d
   and you have to triangulate the polygons with
   http://library.wolfram.com/packages/polygontriangulation/
b) at the end of the (in german) notebook:

  
http://phong.informatik.uni-leipzig.de/~kuska/signal/MathGraphIntro.zip
   is a function that slice a 3d plot with contour lines and
   make a true shadow plot -- using the true shadow plot
   it should be easy to shift the polygons to the height values

Regards
  Jens

David Park wrote:
> 
> MathGroup,
> 
> This provides additional information and examples for my earlier posting.
> 
> I am trying to use ContourPlot to generate colored planar Polygons
> representing contour regions, and then map them into 3D planar Polygons.
> 
> There are two problems.
> 
> 1) The output from converting ContourGraphics to Graphics is not separate
> polygons for each contour region, but a series of overlapping polygons.
> Mathematica takes advantage of the fact that in 2D you can lay one Polygon
> on top of another. But when we convert the Polygons to 3D objects,
> Mathematica has difficulties. Laying one polygon over another in 3D
> generally confuses Mathematica's rendering, and perhaps is a difficult 3D
> problem in general. There is a solution. We can just separate the Polygons
> into layers with separations just large enough to unconfuse the rendering.
> As long as we only look at the "top" side, this works. I illustrate a case
> below.
> 
> 2) Mathematica does not correctly render planar polygons that have a concave
> edge. This despite the fact that the Polygon Help says: "In three
> dimensions, planar polygons that do not intersect themselves will be drawn
> exactly as you specify them." But how does Mathematica determine that a
> Polygon is planar, once approximate numbers have been introduced? Somehow we
> need a method to specify that a 3D Polygon is to be taken as planar,
> regardless of round off errors.
> 
> Now for examples.
> 
> Needs["Graphics`Animation`"]
> 
> cplot = ContourPlot[x y, {x, -3, 3}, {y, -3, 3}, ColorFunction -> Hue];
> 
> We extract the colors and Polygons and throw away the Lines. (In 2D
> Mathematica does not draw the edges of Polygons; in 3D it does.)
> 
> cgraphics2d =
>     Cases[First[Graphics[cplot]], a : {Hue[_], Polygon[_], ___} :> Take[a,
> 2],
>        Infinity];
> 
> Now we convert the Polygons to 3D objects, introduce an exaggerated spacing
> between layers and plot it. It illustrates how Mathematica uses an overlay
> technique on ContourPlots.
> 
> cgraphics3da =
>     Table[Part[cgraphics2d,
>           i] /. {x_?NumericQ, y_?NumericQ} -> {x, y, 0.1 i}, {i, 1,
>         Length[cgraphics2d]}];
> Show[Graphics3D[
>       {cgraphics3da},
>       Lighting -> False,
>       ImageSize -> 450]];
> 
> Here is the same case with close spacing and an affine transformation to 3D
> space.
> 
> cgraphics3da =
>     Table[Part[cgraphics2d,
>           i] /. {x_?NumericQ, y_?NumericQ} -> {x, y, 0.000001 i}, {i, 1,
>         Length[cgraphics2d]}];
> cgraphics3db =
>     cgraphics3da /. {x_?NumericQ, y_?NumericQ,
>           z_?NumericQ} -> {2x + y, -x + 2y, -1.5x + y + z};
> plot1 =
>     Show[Graphics3D[
>         {cgraphics3db},
>         Lighting -> False,
>         ImageSize -> 450]];
> SpinShow[plot1, SpinOrigin -> {0, 0, 0}, SpinDistance -> 5]
> SelectionMove[EvaluationNotebook[], All, GeneratedCell]
> FrontEndTokenExecute["OpenCloseGroup"]
> FrontEndTokenExecute["SelectionAnimate"]
> 
> That works well, but if our contour regions have concave edges, we run into
> the second problem.
> 
> cplot = ContourPlot[x^2 + y^2, {x, -3, 3}, {y, -3, 3}, ColorFunction ->
> Hue];
> cgraphics2d =
>     Cases[First[Graphics[cplot]], a : {Hue[_], Polygon[_], ___} :> Take[a,
> 2],
>        Infinity];
> cgraphics3da =
>     Table[Part[cgraphics2d,
>           i] /. {x_?NumericQ, y_?NumericQ} -> {x, y, 0.1 i}, {i, 1,
>         Length[cgraphics2d]}];
> Show[Graphics3D[
>       {cgraphics3da},
>       Lighting -> False,
>       ImageSize -> 450]];
> 
> The 3D Polygons are rendered to extend outside the actual region, presumably
> because Mathematica does not recognize them as planar. So, if we do a
> closely spaced 3D plot as with the other function, we do not obtain properly
> colored regions.
> 
> cgraphics3da =
>     Table[Part[cgraphics2d,
>           i] /. {x_?NumericQ, y_?NumericQ} -> {x, y, 0.00001 i}, {i, 1,
>         Length[cgraphics2d]}];
> cgraphics3db =
>     cgraphics3da /. {x_?NumericQ, y_?NumericQ,
>           z_?NumericQ} -> {2x + y, -x + 2y, -1.5x + y + z};
> plot1 =
>     Show[Graphics3D[
>         {cgraphics3db},
>         Lighting -> False,
>         ImageSize -> 450]];
> SpinShow[plot1, SpinOrigin -> {0, 0, 0}, SpinDistance -> 5]
> SelectionMove[EvaluationNotebook[], All, GeneratedCell]
> FrontEndTokenExecute["OpenCloseGroup"]
> FrontEndTokenExecute["SelectionAnimate"]
> 
> Does anyone have any ideas for solving this problem?
> 
> David Park
> djmp at earthlink.net
> http://home.earthlink.net/~djmp/


  • Prev by Date: Re: problem with Collect[] for long polynomial
  • Next by Date: Comparison of Mathematica on Various Computers
  • Previous by thread: Raising Contour Plot Graphics to 3D - II
  • Next by thread: Re: Raising Contour Plot Graphics to 3D - II