Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

Re: Color Fill areas in 2D graphic

  • To: mathgroup at smc.vnet.net
  • Subject: [mg23403] Re: [mg23354] Color Fill areas in 2D graphic
  • From: Murray Eisenberg <murray at math.umass.edu>
  • Date: Sat, 6 May 2000 02:26:45 -0400 (EDT)
  • Organization: Mathematics & Statistics, Univ. of Mass./Amherst
  • References: <8etpii$n24@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

There's something missing in the first section of the notebook:  The
cell

  Show[Graphics[
		{LightBlue, (curve ParametricDraw[
              Evaluate[ellipse[\[Pi]/4, t]], {t, 0, 2\[Pi]}]) /. 
          Line -> Polygon, Black, curve}],

     AspectRatio -> Automatic, PlotRange -> {{-10, 10}, {-10, 10}}, 
    Background -> Linen,
     {}];

refers to a symbol "curve" that has not been defined.

David Park wrote:
> 
> >
> > Hi,
> > I want combine several ParametricPlot Images. After this is done, how
> > can I fill areas within the image with a specific color ?
> > thanks
> > Roland Pabel
> >
> 
> Hi Roland,
> 
> If you wish to try out my DrawingPaper routines, which are available at my
> web site below, then the attached Mathematica notebook, ColoredArea.nb,
> shows how to fill in areas with color. (MathGroup readers may contact me for
> a copy of the notebook.)
> 
> If you have a closed curve defined by a parametric expression, then all you
> have to do is convert the Line primitive to a Polygon primitive and supply a
> color.
> 
> If the area is defined by the combination of several parametric arcs, then
> DrawingPaper has a routine, StitchLineSegments which will stitch the arcs
> together into one line which can then be converted to a Polygon.
> 
> Of course, the standard way to color the area between two curves is to use
> FilledPlot, but this requires the first curve to always be above the second
> curve. Sometimes this does not happen in the x-y plane but does happen in a
> different coordinate system. In those cases the DrawingPaper routine
> DrawingTransform can convert a FilledPlot back to x-y coordinates. For
> example, the area outside a unit circle but inside a cardioid can be filled
> with FilledPlot in a theta-r representation and then transformed to a x-y
> representation.
> 
> The notebook has examples of coloring in a tilted ellipse, coloring in the
> area bounded by two intersecting parabolas with their axes in the y and -y
> direction, and the circle-cardioid example mentioned above.
> 
> The packages you will need for the notebook from my web site are
> DrawingPaper.m and FilledDrawing.m. The packages should be put in the
> AddOns/ExtraPackages/Graphics folder. There are also other Drawing packages
> and a tutorial.
> 
> David Park
> djmp at earthlink.net
> http://home.earthlink.net/~djmp/
> 
> (***********************************************************************
> 
>                     Mathematica-Compatible Notebook
> 
> This notebook can be used on any computer system with Mathematica 4.0,
> MathReader 4.0, or any compatible application. The data for the notebook
> 
> starts with the line containing stars above.
> 
> To get the notebook into a Mathematica-compatible application, do one of
> 
> the following:
> 
> * Save the data starting with the line of stars above into a file
>   with a name ending in .nb, then open the file inside the application;
> 
> * Copy the data starting with the line of stars above to the
>   clipboard, then use the Paste menu command inside the application.
> 
> Data for notebooks contains only printable 7-bit ASCII and can be
> sent directly in email or through ftp in text mode.  Newlines can be
> CR, LF or CRLF (Unix, Macintosh or MS-DOS style).
> 
> NOTE: If you modify the data for this notebook not in a Mathematica-
> compatible application, you must delete the line below containing the
> word CacheID, otherwise Mathematica-compatible applications may try to
> use invalid cache data.
> 
> For more information on notebooks and Mathematica-compatible
> applications, contact Wolfram Research:
>   web: http://www.wolfram.com
>   email: info at wolfram.com
>   phone: +1-217-398-0700 (U.S.)
> 
> Notebook reader applications are available free of charge from
> Wolfram Research.
> ***********************************************************************)
> 
> (*CacheID: 232*)
> 
> (*NotebookFileLineBreakTest
> NotebookFileLineBreakTest*)
> (*NotebookOptionsPosition[      8299,        242]*)
> (*NotebookOutlinePosition[      8952,        265]*)
> (*  CellTagsIndexPosition[      8908,        261]*)
> (*WindowFrame->Normal*)
> 
> Notebook[{
> 
> Cell[CellGroupData[{
> Cell["Filling Areas with Color", "Title"],
> 
> Cell["\<\
> David Park
> djmp at earthlink.net
> http://home.earthlink.net/~djmp/\
> \>", "Subtitle"],
> 
> Cell[TextData[{
>   "The Graphics`DrawingPaper` packages can be downloaded from my web
> site. It \
> should be placed in the AddOns/ExtraPackages/Graphics directory. It can
> then \
> be used just like the standard packages. Here is a click-on link to the
> web \
> site:\n",
>   ButtonBox["http://home.earthlink.net/~djmp/ ",
>     ButtonData:>{
>       URL[ "http://home.earthlink.net/~djmp/ "], None},
>     ButtonStyle->"Hyperlink"],
>   " "
> }], "Text"],
> 
> Cell[BoxData[{
>     \(Needs["\<Graphics`DrawingPaper`\>"]\), "\[IndentingNewLine]",
>     \(Needs["\<Graphics`FilledDrawing`\>"]\), "\[IndentingNewLine]",
>     \(Needs["\<Geometry`Rotations`\>"]\)}], "Input"],
> 
> Cell[CellGroupData[{
> 
> Cell["For a closed curve", "Section"],
> 
> Cell["\<\
> This is the parametric representation of an ellipse with 7:3 axes ratio
> and \
> rotated an an angle \[Theta].\
> \>", "Text"],
> 
> Cell[BoxData[
>     \(ellipse[\[Theta]_, t_] :=
>       RotationMatrix2D[\(-\[Theta]\)] . {7  Cos[t], 3  Sin[t]}\)],
> "Input"],
> 
> Cell["\<\
> We set the color to be LightBlue (DrawingPaper automatically loads in \
> Graphics`Colors`), parametrically draw the curve, save it, convert the
> Line \
> to a Polygon, change the color to Black and display the curve.\
> \>", "Text"],
> 
> Cell[BoxData[
>     \(\(Show[
>         Graphics[\n\t\t{LightBlue, \((curve
>                   ParametricDraw[
>                     Evaluate[ellipse[\[Pi]/4, t]], {t, 0, 2  \[Pi]}])\)
> /.
>               Line \[Rule] Polygon, Black, curve}], \n\n
>         AspectRatio \[Rule] Automatic,
>         PlotRange \[Rule] {{\(-10\), 10}, {\(-10\), 10}},
>         Background \[Rule] Linen, \n{}];\)\)], "Input",
>   GeneratedCell->False]
> }, Closed]],
> 
> Cell[CellGroupData[{
> 
> Cell["For a region defined by several arcs", "Section"],
> 
> Cell["\<\
> Here are two parabolas with their axes in the y and -y directions. (If
> they \
> were in the x direction we could use FilledPlot or FilledDraw.)\
> \>", "Text"],
> 
> Cell[BoxData[{
>     \(\(par1[t_] := {\(-3\) + t\^2, t};\)\), "\[IndentingNewLine]",
>     \(par2[t_] := {3 - t\^2, t}\)}], "Input"],
> 
> Cell["This finds their points of intersection.", "Text"],
> 
> Cell[CellGroupData[{
> 
> Cell[BoxData[
>     \(Solve[par1[t] \[Equal] par2[t]]\)], "Input"],
> 
> Cell[BoxData[
>     \({{t \[Rule] \(-\ at 3\)}, {t \[Rule] \ at 3}}\)], "Output"]
> }, Open  ]],
> 
> Cell["This plots the two curves to show the area we wish to color.",
> "Text"],
> 
> Cell[BoxData[
>     \(\(Show[
>         Graphics[\n\t\t{ParametricDraw[
>               Evaluate[{par1[t], par2[t]}], {t, \(-\ at 3\), \ at 3}]}], \n\n
>         AspectRatio \[Rule] Automatic,
>         PlotRange \[Rule] {{\(-10\), 10}, {\(-10\), 10}}/2,
>         Background \[Rule] Linen, \n{}];\)\)], "Input",
>   GeneratedCell->False],
> 
> Cell["\<\
> We want to define a curve by stitching the two arc segments together.
> Then \
> all we have to do is convert the Line to a Polygon. DrawingPaper
> contains a \
> routine for stitching together arcs. The only thing we have to be
> careful \
> about is stitching them end to end in the correct order. Since the
> plotting \
> iterators always run from the minimum value to the maximum value (no
> matter \
> what order we put them), we will often have to reverse the order of the
> \
> points in some of the line segments.\
> \>", "Text"],
> 
> Cell[CellGroupData[{
> 
> Cell[BoxData[
>     \(\(?StitchLineSegments\)\)], "Input"],
> 
> Cell[BoxData[
>     \("StitchLineSegments[segs_List] will stitch together a list of line
> \
> segments into one line segment. One must be careful with the order of
> the \
> segments and the order of the points within each segment. The segs list
> is \
> Flattened as the first step."\)], "Print"]
> }, Open  ]],
> 
> Cell["\<\
> So here we assemble our curve by drawing the two line segments
> separately and \
> stitching them together.\
> \>", "Text"],
> 
> Cell[BoxData[
>     \(\(curve
>         StitchLineSegments[{ParametricDraw[
>               par1[t] // Evaluate, {t, \(-\ at 3\), \ at 3}],
>             ParametricDraw[par2[t] // Evaluate, {t, \(-\ at 3\), \ at 3}] /.
>               Line[a_] \[RuleDelayed] Line[Reverse[a]]}];\)\)],
> "Input"],
> 
> Cell["\<\
> Now it is a simple matter to draw the colored area and outline it in
> Black.\
> \>", "Text"],
> 
> Cell[BoxData[
>     \(\(Show[
>         Graphics[\n\t\t{LightBlue, curve /. Line \[Rule] Polygon, Black,
> 
>             curve}], \n\nAspectRatio \[Rule] Automatic,
>         PlotRange \[Rule] {{\(-10\), 10}, {\(-10\), 10}}/2,
>         Background \[Rule] Linen, \n{}];\)\)], "Input",
>   GeneratedCell->False]
> }, Closed]],
> 
> Cell[CellGroupData[{
> 
> Cell["\<\
> For a region where FilledPlot can be used in a different coordinate
> system\
> \>", "Section"],
> 
> Cell["\<\
> Sometimes we can use a different coordinate system where FilledPlot will
> work \
> for the filling of the areas between two  curve. For example, to color
> the \
> area inside of a cardioid, but outside a unit circle, we can do a
> FilledDraw \
> in the \[Theta]-r plane. Then we can use the DrawingTransform routine
> from \
> DrawingPaper to transform to an x-y representation.\
> \>", "Text"],
> 
> Cell[CellGroupData[{
> 
> Cell[BoxData[
>     \(\(?DrawingTransform\)\)], "Input"],
> 
> Cell[BoxData[
>     \("DrawingTransform[f1, f2], where f1 and f2 are function names, is
> a \
> rule which applies the following transformation to all points in the
> graphics \
> object: {x_?NumberQ, y_?NumberQ} \[Rule] {f1[x, y], f2[x, y]}."\)],
> "Print"]
> }, Open  ]],
> 
> Cell[TextData[{
>   "This shows how ",
>   Cell[BoxData[
>       \(DrawingTransform\)]],
>   " can often be used to simplify the filling of areas. We make an
> \[Theta]-r \
> plot and then transform to rectangular coordinates. Don't mix up the
> order of \
> \[Theta] and r! DrawPolarR is the DrawingPaper version of PolarPlot and
> is \
> used to outline the regions."
> }], "Text"],
> 
> Cell[BoxData[
>     \(\(Show[
>         Graphics[\n\t\t{FilledDraw[{1,
>                   1 + Cos[\[Theta]]}, {\[Theta], \(-\[Pi]\)/2, \[Pi]/2},
> 
>                 Fills \[Rule] LightSteelBlue, \ Curves \[Rule] None,
>                 PlotPoints \[Rule] 31] /.
>               DrawingTransform[Function[{\[Theta], r}, r\
> Cos[\[Theta]]],
>                 Function[{\[Theta], r}, r\ Sin[\[Theta]]]],
> \n\t\tDrawPolarR[
>               1 + Cos[\[Theta]], {\[Theta], 0, 2  \[Pi]},
>               PlotPoints \[Rule] 31], \n\t\tDrawPolarR[
>               1, {\[Theta], 0, 2  \[Pi]}]}], \n\n
>         AspectRatio \[Rule] Automatic,
>         PlotRange \[Rule] {{\(-1.501\), 2.5}, {\(-2\), 2}},
>         Background \[Rule] Linen, \n{Frame \[Rule] True,
>           FrameLabel \[Rule] {x, y}}];\)\)], "Input"]
> }, Closed]]
> }, Open  ]]
> },
> FrontEndVersion->"4.0 for Microsoft Windows",
> ScreenRectangle->{{0, 1280}, {0, 943}},
> WindowSize->{660, 763},
> WindowMargins->{{0, Automatic}, {Automatic, 0}}
> ]
> 
> (***********************************************************************
> Cached data follows.  If you edit this Notebook file directly, not using
> Mathematica, you must remove the line containing CacheID at the top of
> the file.  The cache data will then be recreated when you save this file
> 
> from within Mathematica.
> ***********************************************************************)
> 
> (*CellTagsOutline
> CellTagsIndex->{}
> *)
> 
> (*CellTagsIndex
> CellTagsIndex->{}
> *)
> 
> (*NotebookFileOutline
> Notebook[{
> 
> Cell[CellGroupData[{
> Cell[1739, 51, 41, 0, 115, "Title"],
> Cell[1783, 53, 90, 4, 122, "Subtitle"],
> Cell[1876, 59, 434, 10, 71, "Text"],
> Cell[2313, 71, 206, 3, 70, "Input"],
> 
> Cell[CellGroupData[{
> Cell[2544, 78, 37, 0, 59, "Section"],
> Cell[2584, 80, 131, 3, 33, "Text"],
> Cell[2718, 85, 122, 2, 30, "Input"],
> Cell[2843, 89, 236, 4, 52, "Text"],
> Cell[3082, 95, 420, 9, 150, "Input"]
> }, Closed]],
> 
> Cell[CellGroupData[{
> Cell[3539, 109, 55, 0, 39, "Section"],
> Cell[3597, 111, 165, 3, 52, "Text"],
> Cell[3765, 116, 129, 2, 52, "Input"],
> Cell[3897, 120, 56, 0, 33, "Text"],
> 
> Cell[CellGroupData[{
> Cell[3978, 124, 64, 1, 30, "Input"],
> Cell[4045, 127, 73, 1, 32, "Output"]
> }, Open  ]],
> Cell[4133, 131, 76, 0, 33, "Text"],
> Cell[4212, 133, 320, 7, 135, "Input"],
> Cell[4535, 142, 521, 8, 109, "Text"],
> 
> Cell[CellGroupData[{
> Cell[5081, 154, 56, 1, 30, "Input"],
> Cell[5140, 157, 284, 4, 82, "Print"]
> }, Open  ]],
> Cell[5439, 164, 128, 3, 33, "Text"],
> Cell[5570, 169, 276, 5, 77, "Input"],
> Cell[5849, 176, 99, 2, 33, "Text"],
> Cell[5951, 180, 299, 6, 130, "Input"]
> }, Closed]],
> 
> Cell[CellGroupData[{
> Cell[6287, 191, 101, 2, 39, "Section"],
> Cell[6391, 195, 388, 6, 71, "Text"],
> 
> Cell[CellGroupData[{
> Cell[6804, 205, 54, 1, 30, "Input"],
> Cell[6861, 208, 246, 3, 63, "Print"]
> }, Open  ]],
> Cell[7122, 214, 361, 8, 71, "Text"],
> Cell[7486, 224, 785, 14, 190, "Input"]
> }, Closed]]
> }, Open  ]]
> }
> ]
> *)
> 
> (***********************************************************************
> End of Mathematica Notebook file.
> ***********************************************************************)

-- 
Murray Eisenberg                     murray at math.umass.edu
Mathematics & Statistics Dept.       phone 413 549-1020 (H)
Univ. of Massachusetts                     413 545-2859 (W)
Amherst, MA 01003-4515


  • Prev by Date: Re: Re: plot discrete spectrum
  • Next by Date: win 2000 and bracket-maching speed
  • Previous by thread: RE: Color Fill areas in 2D graphic
  • Next by thread: ExitDialog in ButtonfFunction