(*^ ::[paletteColors = 128; currentKernel; fontset = title, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, e8, 24, "Times"; ; fontset = subtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, bold, L1, e6, 18, "Times"; ; fontset = subsubtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, center, M7, italic, L1, e6, 14, "Times"; ; fontset = section, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M22, bold, L1, a20, 18, "Times"; ; fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M19, bold, L1, a15, 14, "Times"; ; fontset = subsubsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, whiteBox, M18, bold, L1, a12, 12, "Times"; ; fontset = text, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Times"; ; fontset = input, noPageBreakInGroup, preserveAspect, groupLikeInput, M42, N23, bold, L-5, 12, "Courier"; ; fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L-5, 12, "Courier"; ; fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, R65535, L-5, 12, "Courier"; ; fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, L-5, 12, "Courier"; ; fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M42, N23, B65535, L-5, 12, "Courier"; ; fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeGraphics, M7, l34, w282, h287, L1, 12, "Courier"; ; fontset = name, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, L1, 10, "Geneva"; ; fontset = header, inactive, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = Left Header, inactive, 12, "Times"; ; fontset = footer, inactive, noKeepOnOnePage, preserveAspect, center, M7, L1, 12, "Times"; ; fontset = Left Footer, inactive, 12, "Times"; ; fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 10, "Times"; ; fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = special3, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = special4, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ; fontset = special5, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, L1, 12, "Times"; ;] :[font = title; inactive; preserveAspect; startGroup; ] Airfoil :[font = section; inactive; Cclosed; preserveAspect; startGroup; ] Description :[font = text; inactive; preserveAspect; ] The purpose of this Mathematica Notebook is to show a method for displaying and analyzing airfoils, using ComplexMapPlot.m. This entire package is included at the end of this notebook. ;[s] 5:0,0;20,1;31,0;107,2;125,0;186,-1; 3:3,13,9,Times,0,12,0,0,0;1,13,9,Times,2,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = text; inactive; preserveAspect; endGroup; ] Dan Cohen Wolfram Research, Inc. :[font = section; inactive; Cclosed; preserveAspect; startGroup; ] Symmetrical Joukowski Profile :[font = text; inactive; preserveAspect; ] The Joukowski class of profiles, although not used in practice, resemble some real profiles both geometrically and in respect to flow pattern. Also, since their aerodynamic properties can be found relatively easily, they are suitable for analytic studies, the results of which are sometimes a useful guide to the characteristics of real profiles. :[font = text; inactive; preserveAspect; ] The transformation, z + 1/z, when applied to a circle with center on the a-axis and passing through the point (-1, 0) produces the Joukowski airfoil. ;[s] 3:0,0;20,1;27,0;150,-1; 2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,1,12,0,0,0; :[font = input; preserveAspect; startGroup; ] ComplexMapPlot[z + 1/z, z, {Circle[{0.25, 0}, 1.25]}]; :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 12; pictureTop = 4; pictureWidth = 415; pictureHeight = 198; endGroup; pictureID = 9774; ] :[font = text; inactive; preserveAspect; ] We can now develop a range of profiles. To show the profiles as a "movie", double-click the first graphics cell below. :[font = input; preserveAspect; ] Do[ ComplexMapPlot[ z + 1/z, z, {Disk[{n, 0}, n + 1]}, PlotRange -> {{-2, 3.5}, {-2, 2}} ], {n, 0, 1, 0.1} ] :[font = postscript; PICT; formatAsPICT; output; inactive; Cclosed; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; startGroup; pictureID = 28992; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 1518; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 27606; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 19947; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 20004; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 642; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 323; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 3376; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 3169; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 28945; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; endGroup; endGroup; pictureID = 3873; ] :[font = section; inactive; Cclosed; preserveAspect; startGroup; ] Useful Airfoils :[font = text; inactive; preserveAspect; ] A functional airfoil must be nonsymmetrical. Otherwise it would not develop the pressure difference across the top and bottom of the airfoil, which is responsible for lift. To develop a more useful airfoil we will need to modify the Joukowski profile. Moving the circle above or below the horizontal axis should provide the asymmetry required. :[font = input; preserveAspect; startGroup; ] Do[ ComplexMapPlot[ z + 1/z, z, {Disk[{0.3, n}, 0.3 + 1]}, PlotRange -> {{-2, 3.5}, {-2, 2}} ], {n, -0.3, 0.3, 0.05} ] :[font = postscript; PICT; formatAsPICT; output; inactive; Cclosed; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; startGroup; pictureID = 2501; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 9670; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 16650; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 8900; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 7053; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 16236; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 2290; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 29245; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 2737; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 24931; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 32028; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; pictureID = 24218; ] :[font = postscript; PICT; formatAsPICT; output; inactive; preserveAspect; pictureLeft = 34; pictureWidth = 282; pictureHeight = 134; endGroup; endGroup; endGroup; pictureID = 31491; ] :[font = section; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] Implementation :[font = text; inactive; preserveAspect; ] This Notebook makes use of a function that implements a sophisticated form of complex function mapping. It is included in the book Exploring Mathematics with Mathematica, Jerry Glynn and Theodore Gray, Addison-Wesley, 1991. ;[s] 3:0,0;134,1;172,0;227,-1; 2:2,13,9,Times,0,12,0,0,0;1,13,9,Times,2,12,0,0,0; :[font = subsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] Preparation :[font = text; inactive; initialization; noPageBreak; dontPreserveAspect; ] Create the context representing the contents of this Notebook: :[font = input; initialization; dontPreserveAspect; ] *) BeginPackage["ComplexMapPlot`"]; EndPackage[]; (* :[font = text; inactive; initialization; dontPreserveAspect; ] Load any needed packages: :[font = input; initialization; dontPreserveAspect; ] *) Needs["Graphics`Colors`"]; (* :[font = text; inactive; initialization; dontPreserveAspect; ] Declare all the globally visible symbols: :[font = input; initialization; dontPreserveAspect; ] *) MapGraphics; RectangularGrid; HorizontalLines; VerticalLines; PolarGrid; PolarCircles; PolarLines; ComplexMapPlot; PlotPoints; IncludePreimage; (* :[font = text; inactive; initialization; dontPreserveAspect; ] Begin private context: :[font = input; initialization; dontPreserveAspect; ] *) Begin["ComplexMapPlot`Private`"]; (* :[font = text; inactive; initialization; dontPreserveAspect; ] Declare all the private symbols: :[font = input; initialization; dontPreserveAspect; endGroup; ] *) `pairToComplex; `complexToPair; `transformList; `listParameter; `transformCircle; `MG0; (* :[font = subsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] Definitions :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] MapGraphics :[font = input; initialization; dontPreserveAspect; ] *) `parametricPlotOptions; (* :[font = input; initialization; dontPreserveAspect; ] *) pairToComplex[{re_, im_}] = re + im I; (* :[font = input; initialization; dontPreserveAspect; ] *) complexToPair[z_] = {Re[z], Im[z]}; (* :[font = input; initialization; dontPreserveAspect; ] *) transformList[f_, {min:{_, _}, max:{_, _}}] := Module[ {t, minz, deltaz}, minz = pairToComplex[min]; deltaz = pairToComplex[max] - minz; ParametricPlot[ complexToPair[f[minz + t * deltaz]], {t, 0.0, 1.0}, Release[parametricPlotOptions] ][[1, 1, 1, 1]] ] (* :[font = input; initialization; dontPreserveAspect; ] *) transformList[f_, list_] := Module[ {t}, ParametricPlot[ complexToPair[f[pairToComplex[ listParameter[ t, list ] ]]], {t, 0.0, 1.0}, Release[parametricPlotOptions] ][[1, 1, 1, 1]] ] (* :[font = input; initialization; dontPreserveAspect; ] *) listParameter[t_, {min_, max_}] := min + t * (max - min); (* :[font = input; initialization; dontPreserveAspect; ] *) listParameter[t_, list_] := Module[ {parameter, length, startIndex, startPoint}, length = Length[list]; parameter = t (length - 1); startIndex = Floor[parameter] + 1; startPoint = list[[startIndex]]; If[startIndex == length, startPoint, (*else*) startPoint + (parameter - startIndex + 1) * (list[[startIndex + 1]] - startPoint) ] ] (* :[font = input; initialization; dontPreserveAspect; ] *) transformCircle[f_, center_, {rx_, ry_}, {mint_, maxt_}] := Module[ {t, zcenter}, zcenter = pairToComplex[center]; ParametricPlot[ complexToPair[f[ rx Cos[t] + I ry Sin[t] + zcenter ]], {t, N[mint], N[maxt]}, Release[parametricPlotOptions] ][[1, 1, 1, 1]] ] (* :[font = input; initialization; dontPreserveAspect; ] *) MapGraphics[Graphics[list_List, opts___], f_, options___] := ( parametricPlotOptions = Join[{DisplayFunction -> Identity}, options]; Graphics[ MG0[list, f], opts ] ) (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[d_List, f_] := Map[ MG0[#, f]& , d ] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Point[d_List], f_] := Point[complexToPair[f[pairToComplex[d]]]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Line[d_List], f_] := Line[transformList[f, d]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Rectangle[{xmin_, ymin_}, {xmax_, ymax_}], f_] := MG0[Polygon[{ {xmin,ymin}, {xmin,ymax}, {xmax, ymax}, {xmax, ymin} }], f] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Polygon[d_List]] := MG0[Polygon[Join[d, First[d]]]] /; First[d] =!= Last[d] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Polygon[d_List], f_] := Polygon[transformList[f, d]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Circle[center_List, r_?NumberQ], f_] := Line[transformCircle[ f, center, {r, r}, {0, 2Pi}]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Circle[center_List, r_?List], f_] := Line[transformCircle[f, center, r, {0, 2Pi}]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Circle[center_List, r_?NumberQ, range_List], f_] := Line[transformCircle[f, center, {r, r}, range]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Circle[center_List, r_?List, range_List], f_] := Line[transformCircle[f, center, r, range]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Disk[center_List, r_?NumberQ], f_] := Polygon[transformCircle[ f, center, {r, r}, {0, 2Pi}]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Disk[center_List, r_?List], f_] := Polygon[transformCircle[f, center, r, {0, 2Pi}]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Disk[center_List, r_?NumberQ, range_List], f_] := Polygon[transformCircle[ f, center, {r, r}, range]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Disk[center_List, r_?List, range_List], f_] := Polygon[transformCircle[f, center, r, range]] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[CellArray[array_, range_List:{{0,0}, {1,1}}, zrange___], f_] := CellArray[ array, { complexToPair[ f[pairToComplex[First[range]]]], complexToPair[ f[pairToComplex[Last[range]]]] }, zrange ] (* :[font = input; initialization; dontPreserveAspect; ] *) MG0[Text[expr_, d_List, opts___], f_] := Text[expr, complexToPair[f[pairToComplex[d]]], opts] (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) MG0[expr_, f_] := expr (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] RectangularGrid :[font = input; initialization; dontPreserveAspect; ] *) Options[RectangularGrid] = { PlotPoints -> 14 }; (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) RectangularGrid[{{Remin_, Remax_}, {Immin_, Immax_}}, options___] := Module[ {plotPoints, n, x}, (* Extract options *) {plotPoints} = {PlotPoints} /. {options} /. Options[RectangularGrid]; If[Head[plotPoints] =!= List, plotPoints = {plotPoints, plotPoints} ]; { GrayLevel[0.5], VerticalLines[{{Remin, Remax}, {Immin, Immax}}, PlotPoints -> plotPoints[[1]], options], GrayLevel[0.0], HorizontalLines[{{Remin, Remax}, {Immin, Immax}}, PlotPoints -> plotPoints[[1]], options] } ] (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] VerticalLines :[font = input; initialization; dontPreserveAspect; ] *) Options[VerticalLines] = { PlotPoints -> 14 }; (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) VerticalLines[{{Remin_, Remax_}, {Immin_, Immax_}}, options___] := Module[ {plotPoints, n, x}, (* Extract options *) {plotPoints} = {PlotPoints} /. {options} /. Options[VerticalLines]; Table[ x = Remin + (Remax - Remin) (n-1)/(plotPoints-1); Line[N[{{x, Immin}, {x, Immax}}]], {n, 1, plotPoints} ] ] (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] HorizontalLines :[font = input; initialization; dontPreserveAspect; ] *) Options[HorizontalLines] = { PlotPoints -> 14 }; (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) HorizontalLines[{{Remin_, Remax_}, {Immin_, Immax_}}, options___] := Module[ {plotPoints, n, x}, (* Extract options *) {plotPoints} = {PlotPoints} /. {options} /. Options[HorizontalLines]; Table[ x = Immin + (Immax - Immin) (n-1)/(plotPoints-1); Line[N[{{Remin, x}, {Remax, x}}]], {n, 1, plotPoints} ] ] (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] PolarGrid :[font = input; initialization; dontPreserveAspect; ] *) Options[PolarGrid] = { PlotPoints -> 14 }; (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) PolarGrid[center:{_, _}, radius_, options___] := Module[ { plotPoints, ncenter, nradius, n, t, }, (* Extract options *) {plotPoints} = {PlotPoints} /. {options} /. Options[PolarGrid]; If[Head[plotPoints] =!= List, plotPoints = {plotPoints, plotPoints} ]; { GrayLevel[0.5], PolarLines[center, radius, PlotPoints -> plotPoints[[2]], options], GrayLevel[0.0], PolarCircles[center, radius, PlotPoints -> plotPoints[[1]], options] } ] (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] PolarCircles :[font = input; initialization; preserveAspect; ] *) Options[PolarCircles] = { PlotPoints -> 14 }; (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) PolarCircles[center:{_, _}, radius_, options___] := Module[ { plotPoints, nradius, ncenter, n, t, minradius, deltaradius }, (* Extract options *) {plotPoints} = {PlotPoints} /. {options} /. Options[PolarCircles]; ncenter = N[center]; nradius = N[radius]; If[Head[nradius] =!= List, nradius = {0, nradius}]; minradius = N[nradius[[1]]]; deltaradius = N[nradius[[2]] - minradius]; Table[ Circle[ncenter, minradius + deltaradius (n-1)/(plotPoints-1)], {n, 1, plotPoints} ] ] (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] PolarLines :[font = input; initialization; dontPreserveAspect; ] *) Options[PolarLines] = { PlotPoints -> 14 }; (* :[font = input; initialization; dontPreserveAspect; endGroup; ] *) PolarLines[center:{_, _}, radius_, options___] := Module[ { plotPoints, nradius, ncenter, n, t, minradius, maxradius }, (* Extract options *) {plotPoints} = {PlotPoints} /. {options} /. Options[PolarLines]; ncenter = N[center]; nradius = N[radius]; If[Head[nradius]=!=List, nradius = {0, nradius}]; minradius = N[nradius[[1]]]; maxradius = N[nradius[[2]]]; Table[ t = 2Pi n / plotPoints; Line[{ ncenter + minradius N[{Cos[t], Sin[t]}], ncenter + maxradius N[{Cos[t], Sin[t]}] }], {n, 1, plotPoints} ] ] (* :[font = subsubsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] ComplexMapPlot :[font = input; initialization; dontPreserveAspect; ] *) Clear[ComplexMapPlot]; (* :[font = input; initialization; dontPreserveAspect; ] *) Options[ComplexMapPlot] = { AspectRatio -> Automatic, Axes -> Automatic, IncludePreimage -> True, Prolog -> {}, Epilog -> {} }; (* :[font = input; initialization; preserveAspect; ] *) ComplexMapPlot[f_, var_, Graphics[domain_, ___], options___] := ComplexMapPlot[f, var, domain, options]; (* :[font = input; initialization; dontPreserveAspect; endGroup; endGroup; ] *) ComplexMapPlot[f_, var_, domain_, options___] := Module[ {output, mapOptions, showOptions, includePreimage}, {includePreimage} = {IncludePreimage} /. {options} /. Options[ComplexMapPlot]; mapOptions = Select[ Join[{options}, Options[ComplexMapPlot]], ( !FreeQ[#, PlotPoints] || !FreeQ[#, PlotDivision] || !FreeQ[#, MaxBend] )& ]; showOptions = Select[ Join[{options}, Options[ComplexMapPlot]], ( FreeQ[#, PlotPoints] && FreeQ[#, PlotDivision] && FreeQ[#, MaxBend] && FreeQ[#, Prolog] && FreeQ[#, Epilog] && FreeQ[#, IncludePreimage] )& ]; output = Map[First, Map[ Function[ff, MapGraphics[ Graphics[{domain}], Function[var2, ff /. var -> var2], mapOptions ]], Flatten[{f}] ]]; {prolog, epilog} = {Prolog, Epilog} /. {options} /. Options[ComplexMapPlot]; If[TrueQ[includePreimage], Show[ Graphics[{ Rectangle[{0, 0}, {1, 1}, Graphics[{domain}, showOptions]], Rectangle[{1.1, 0}, {2.1, 1}, Graphics[{prolog, output, epilog}, showOptions]] }], Axes -> None, PlotRange -> {{0, 2.1}, {0, 1}}, showOptions ], Show[ Graphics[{output, epilog}], showOptions ] ] ] (* :[font = subsection; inactive; initialization; Cclosed; dontPreserveAspect; startGroup; ] Finish :[font = text; inactive; initialization; dontPreserveAspect; ] End private context: :[font = input; initialization; dontPreserveAspect; endGroup; endGroup; endGroup; ] *) End[]; (* ^*)