Re: RegionPlot ?
- To: mathgroup at smc.vnet.net
- Subject: [mg23496] Re: [mg23489] RegionPlot ?
- From: BobHanlon at aol.com
- Date: Sun, 14 May 2000 16:59:59 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 5/12/2000 11:12:28 PM, SChandler at uh.edu writes: >Right now, the function Experimental`CylindricalAlgebraicDecomposition >yields a list of inequalities. For inequalities with two variables, I would >like to be able to plot the region showing where that inequality is >satisfied. > >By way of simple example: > >In[69]:= >ecad = Experimental`CylindricalAlgebraicDecomposition[{x + y <= 3, x - >y >> -4, > x >= 0, y >= 1}, {x, y}] > >Out[69]= >0 <= x < 2 && 1 <= y <= 3 - x || x == 2 && y == 1 > >What I would like to do is something like: > >RegionPlot[ecad,{x,-3,5},{y,-3,7}]. > >The output would be Polygon primitives, Line primitives, and a Point >primitive > >Any thoughts on how to implement this? > >Obviously, one could approximate the matter by creating a table of x,y >values and plotting at {x,y} a primitive of some shape and size for each >table element satisfying the set of inequalities. I was hoping someone >might come up with something more elegant, however. (Maybe ContourPlot >used >in some way?) > Here is an approach that makes use of FilledPlot. I haven't tested it much, but it should give you an idea for one approach. Needs["Graphics`FilledPlot`"] regionPlot[ecad_, {x_Symbol, xMin_?NumericQ, xMax_?NumericQ}, {y_Symbol, yMin_?NumericQ, yMax_?NumericQ}] := Module[{xmask, funcs, pts, plts}, xmask = (UnitStep[x - First[#]] - UnitStep[x - Last[#]]) & /@ Cases[ecad, Inequality[lower___, x, upper___] -> {lower, upper}, {1, Infinity}]; funcs = {First[#], Last[#]} & /@ Cases[ecad, Inequality[lower___, y, upper___] -> {lower, upper}, {1, Infinity}]; pts = Cases[ecad, And[Equal[x, x0_], Equal[y, y0_]] -> Point[{x0, y0}]]; plts = MapThread[ FilledPlot[#1*#2, {x, xMin, xMax}, PlotRange -> {yMin, yMax}, Curves -> None, Epilog -> {AbsolutePointSize[5], RGBColor[1, 0, 0], pts}, DisplayFunction -> Identity] &, {funcs, xmask}]; Show[plts, DisplayFunction -> $DisplayFunction] ]; ecad = Experimental`CylindricalAlgebraicDecomposition[{x + y <= 3, x - y > -4, x >= 0, y >= 1}, {x, y}] regionPlot[ecad, {x, -3, 5}, {y, -3, 7}]; ecad = Experimental`CylindricalAlgebraicDecomposition[{x + y <= 6, x - y > -4, x >= 0, y >= -2}, {x, y}] regionPlot[ecad, {x, -3, 10}, {y, -3, 6}]; Bob BobHanlon at aol.com