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