(************** Content-type: application/mathematica ************** Mathematica-Compatible Notebook This notebook can be used with any Mathematica-compatible application, such as Mathematica, MathReader or Publicon. 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@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[ 167681, 3528]*) (*NotebookOutlinePosition[ 201866, 4682]*) (* CellTagsIndexPosition[ 200438, 4646]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["Averaging Schemes for Polyhedral Meshes", "Chapter", CounterAssignments->{{"Chapter", 6}}, CellTags->"CHA polyhedral"], Cell[TextData[{ "To evaluate a particular cell, simply hit \"Shift+Enter\" with the cursor \ positioned in that cell. If ", StyleBox["Mathematica", FontSlant->"Italic"], " asks to evaluate initialization cell, click \"Yes\". See the ", StyleBox["Mathematica ", FontSlant->"Italic"], "Help browser or wolfram.com for more information on using ", StyleBox["Mathematica", FontSlant->"Italic"], "." }], "Text"], Cell["\<\ This notebook and those for the other seven chapters use a common stylesheet \ that has been imported into the notebook. This style sheet supports \ chapters, section, subsections, numbered equations, numbered figures and \ citations. A separate copy of the stylesheet can be download from the same \ page where this notebook was downloaded. \ \>", "Text"], Cell[TextData[{ StyleBox["COPYRIGHT ISSUES:", FontWeight->"Bold"], " The authors reserve all copyrights associated with this work. Any of \ the material appearing in these notebooks (such as the polyhedral meshes in \ chapter 7) can be used and modified without restriction as long as the use is \ non\[Hyphen]commercial. We simply ask that you acknowledge the authors when \ using material from these notebooks. For those readers interested in \ commercial use of the material in these notebooks, please contact \ jwarren@cs.rice.edu. " }], "Text"], Cell[CellGroupData[{ Cell["Helper functions from previous chapters", "Subsubsection"], Cell[BoxData[ \(displayTaggedMesh[{T_, p_}, tags_, offs_, plotRange_] := \[IndentingNewLine]Show[ Graphics[\[IndentingNewLine]{PointSize[0.04], Point[{0, 0}], \[IndentingNewLine]Table[ Line[Append[ p\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket]\[RightDoubleBracket], p\[LeftDoubleBracket]T\[LeftDoubleBracket]i, 1\[RightDoubleBracket]\[RightDoubleBracket]]], {i, Length[T]}], \[IndentingNewLine]Table[ Text[tags\[LeftDoubleBracket]i\[RightDoubleBracket], p\[LeftDoubleBracket]i\[RightDoubleBracket], offs\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, Length[p]}]}], \[IndentingNewLine]AspectRatio \[Rule] Automatic, TextStyle \[Rule] {FontSize \[Rule] 12}, PlotRange \[Rule] plotRange]\)], "Input", InitializationCell->True], Cell[BoxData[ \(checkRoots[s_, k_] := \[IndentingNewLine]\((\((s /. {x \[Rule] 1, y \[Rule] \(-1\)})\) \[Equal] 0)\)\ && \ \((\((s /. {x \[Rule] \(-1\), y \[Rule] 1})\) \[Equal] 0)\)\ && \ \((\((s /. {x \[Rule] \(-1\), y \[Rule] \(-1\)})\) \[Equal] 0)\)\ && \[IndentingNewLine]If[k \[Equal] 0, True, \[IndentingNewLine]checkRoots[D[s, x], k - 1] && checkRoots[D[s, y], k - 1]]\)], "Input", InitializationCell->True, CellTags->"EQ check roots"], Cell[CellGroupData[{ Cell[BoxData[ \(computeMatrixMask[s_, {lx_, ly_}, k_] := Module[{\[IndentingNewLine]lDiff = Table[\(\((\(-1\) + x)\)\^\(k + 1 - i\)\) \((\(-1\) + y)\)\^i, {i, 0, k + 1}], \[IndentingNewLine]rDiff = Table[\(\((\(-1\) + x\^2)\)\^\(k + 1 - i\)\) \((\(-1\) + y\^2)\)\^i, {i, 0, k + 1}], \[IndentingNewLine]matrix = Table[Sum[\((\(tP[i, j]\)[I, J] - \(tN[i, j]\)[I, J])\) \(x\^I\) y\^J, \[IndentingNewLine]{I, 0, lx + \((k + 1 - i)\) - \((2 k + 2 - 2 j)\)}, {J, 0, ly + i - 2 j}], {i, 0, k + 1}, {j, 0, k + 1}], \[IndentingNewLine]eqs, ineqs, ans}, \[IndentingNewLine]eqs = Flatten[CoefficientList[\(2\^k\) lDiff*s - matrix . rDiff, {x, y}]]; \[IndentingNewLine]ineqs = Flatten[Apply[Plus, Table[Apply[Plus, Abs[Transpose[ Partition[\[IndentingNewLine]If[ matrix\[LeftDoubleBracket]i, j\[RightDoubleBracket] === 0, {{0}}, CoefficientList[ matrix\[LeftDoubleBracket]i, j\[RightDoubleBracket], {x, y}]], {2, 2}, {2, 2}, {1, 1}, 0], \[IndentingNewLine]{3, 4, 1, 2}]], {2, 4}], {j, k + 2}, {i, k + 2}]]] /. {\(tN[ i1_, j1_]\)[i2_, j2_] \[Rule] \(-\(tN[i1, j1]\)[i2, j2]\)}; \[IndentingNewLine]ans = ConstrainedMin[z, Join[\[IndentingNewLine]Table[ eqs\[LeftDoubleBracket]i\[RightDoubleBracket] \[Equal] 0, {i, Length[eqs]}], \[IndentingNewLine]Table[ z \[GreaterEqual] ineqs\[LeftDoubleBracket]i\[RightDoubleBracket], {i, Length[ineqs]}]], \[IndentingNewLine]Variables[ Join[{z}, eqs, ineqs]]]; \[IndentingNewLine]matrix /. ans\[LeftDoubleBracket]2\[RightDoubleBracket]]\)], "Input", CellDingbat->None, InitializationCell->True, CellTags->"EQ difference scheme"], Cell[BoxData[ \(General::"spell1" \(\(:\)\(\ \)\) "Possible spelling error: new symbol name \"\!\(rDiff\)\" is similar to \ existing symbol \"\!\(lDiff\)\"."\)], "Message"] }, Open ]], Cell[BoxData[ \(matrixNorm2D[t_, k_] := Module[{tk = t}, \[IndentingNewLine]Do[ tk = tk . \((t /. {x \[Rule] x\^\(2\^i\), y \[Rule] y\^\(2\^i\)})\), {i, 1, k - 1}]; \[IndentingNewLine]Max[ Apply[Plus, Table[Apply[Plus, Abs[Transpose[ Partition[\[IndentingNewLine]If[ tk\[LeftDoubleBracket]i, j\[RightDoubleBracket] === 0, {{0}}, CoefficientList[ tk\[LeftDoubleBracket]i, j\[RightDoubleBracket], {x, y}]], \[IndentingNewLine]{2\^k, 2\^k}, {2\^k, 2\^k}, {1, 1}, 0], {3, 4, 1, 2}]], {2, 4}], {j, Length[t]}, {i, Length[t]}]]]]\)], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Topological properties of polyhedral meshes", "Section"], Cell[CellGroupData[{ Cell["Polyhedral meshes", "Subsection"], Cell[CellGroupData[{ Cell["Definition and display of monochromatic polyhedral meshes", \ "Subsubsection"], Cell[TextData[{ "Simple triangular and quad meshes. The mesh are of the form ", Cell[BoxData[ \({T, p}\)]], " where ", Cell[BoxData[ \(T\)]], " is a list polygons whose vertices are indexed by the points in the list \ of points ", Cell[BoxData[ \(p\)]], "." }], "Text"], Cell[BoxData[{ \(\(\(tetra = {{{1, 3, 2}, {1, 2, 4}, {1, 4, 3}, {2, 3, 4}}, {{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 0, 1}}};\)\(\[IndentingNewLine]\) \)\), "\[IndentingNewLine]", \(\(\(octa = {{{1, 2, 5}, {2, 3, 5}, {3, 4, 5}, {4, 1, 5}, {2, 1, 6}, {3, 2, 6}, {4, 3, 6}, {1, 4, 6}}, \[IndentingNewLine]{{1, 0, 0}, {0, 1, 0}, {\(-1\), 0, 0}, {0, \(-1\), 0}, {0, 0, 1}, {0, 0, \(-1\)}}};\)\(\[IndentingNewLine]\) \)\), "\[IndentingNewLine]", \(\(cube = {{{1, 4, 3, 2}, {1, 2, 6, 5}, {2, 3, 7, 6}, {3, 4, 8, 7}, {4, 1, 5, 8}, {5, 6, 7, 8}}, {{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 1}, {1, 1, 1}, {0, 1, 1}}};\)\)}], "Input", InitializationCell->True], Cell["An interesting quad mesh - a torus made of 16 quads", "Text"], Cell[BoxData[ \(\(doughnut = {{\[IndentingNewLine]{1, 2, 6, 5}, {2, 3, 7, 6}, {3, 4, 8, 7}, {4, 1, 5, 8}, \[IndentingNewLine]{9, 10, 14, 13}, {10, 11, 15, 14}, {11, 12, 16, 15}, {12, 9, 13, 16}, \[IndentingNewLine]{1, 9, 10, 2}, {2, 10, 11, 3}, {3, 11, 12, 4}, {4, 12, 9, 1}, \[IndentingNewLine]{5, 6, 14, 13}, {6, 7, 15, 14}, {7, 8, 16, 15}, {8, 5, 13, 16}}, \[IndentingNewLine]{{1, 1, 1}, {1, \(-1\), 1}, {\(-1\), \(-1\), 1}, {\(-1\), 1, 1}, \[IndentingNewLine]{3, 3, 1}, {3, \(-3\), 1}, {\(-3\), \(-3\), 1}, {\(-3\), 3, 1}, \[IndentingNewLine]{1, 1, \(-1\)}, {1, \(-1\), \(-1\)}, {\(-1\), \(-1\), \(-1\)}, \ {\(-1\), 1, \(-1\)}, \[IndentingNewLine]{3, 3, \(-1\)}, {3, \(-3\), \(-1\)}, {\(-3\), \(-3\), \(-1\)}, \ {\(-3\), 3, \(-1\)}}};\)\)], "Input", InitializationCell->True], Cell["An interesting triangular mesh - stellated octahedron", "Text"], Cell[BoxData[ \(\(stellatedOcta = {{{1, 2, 7}, {2, 5, 7}, {5, 1, 7}, {2, 3, 8}, {3, 5, 8}, {5, 2, 8}, \[IndentingNewLine]{3, 4, 9}, {4, 5, 9}, {5, 3, 9}, {4, 1, 10}, {1, 5, 10}, {5, 4, 10}, \[IndentingNewLine]{2, 1, 11}, {1, 6, 11}, {6, 2, 11}, {3, 2, 12}, {2, 6, 12}, {6, 3, 12}, \[IndentingNewLine]{4, 3, 13}, {3, 6, 13}, {6, 4, 13}, {1, 4, 14}, {4, 6, 14}, {6, 1, 14}}, \[IndentingNewLine]{{1, 0, 0}, {0, 1, 0}, {\(-1\), 0, 0}, {0, \(-1\), 0}, {0, 0, 1}, {0, 0, \(-1\)}, \[IndentingNewLine]{1, 1, 1}, {\(-1\), 1, 1}, {\(-1\), \(-1\), 1}, {1, \(-1\), 1}, {1, 1, \(-1\)}, {\(-1\), 1, \(-1\)}, {\(-1\), \(-1\), \(-1\)}, {1, \(-1\), \ \(-1\)}}};\)\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(displayMesh[{T, G}]\)]], " displays mesh with topology ", Cell[BoxData[ \(T\)]], " and geometry ", Cell[BoxData[ \(G\)]] }], "Text"], Cell[BoxData[ \(displayMesh[{T_, G_}, opts___] := \[IndentingNewLine]Show[ Graphics3D[\[IndentingNewLine]Table[ Polygon[G\[LeftDoubleBracket] T\[LeftDoubleBracket]i\[RightDoubleBracket], {1, 2, 3}\[RightDoubleBracket]], {i, Length[T]}]], Axes \[Rule] True, Ticks \[Rule] False, opts]\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[GraphicsArray[{displayMesh[octa], displayMesh[cube]}]]\)], "Input",\ CellTags->"FIG oct and cube"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Definition and display of color meshes", "Subsubsection"], Cell[TextData[{ "Example of mesh where vertex information includes positions and RGB \ values. The meshes are of the form ", Cell[BoxData[ \({T, p}\)]], " where ", Cell[BoxData[ \(p\)]], " is a six\[Hyphen]tuple including three coordinates of position and three \ coordinates of vertex color. Note that subdividing the color information \ leads to smooth colors over the mesh. Note that ", Cell[BoxData[ \(colorRing\)]], " and ", Cell[BoxData[ \(colorAxe\)]], " include creases edges and vertices. See section 7.2.4 for details." }], "Text"], Cell[BoxData[{ \(\(\(colorCube = {{{1, 4, 3, 2}, {1, 2, 6, 5}, {2, 3, 7, 6}, {3, 4, 8, 7}, {4, 1, 5, 8}, {5, 6, 7, 8}}, {{0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0}, {1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 0}, {0, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0}, {1, 1, 1, 0, 1, 0}, {0, 1, 1, 0, 1, 0}}};\)\(\n\) \)\), "\[IndentingNewLine]", \(\(\(colorRing = {{{5, 6, 2, 1}, {6, 7, 3, 2}, {7, 8, 4, 3}, {8, 5, 1, 4}, {13, 9, 10, 14}, {14, 10, 11, 15}, {15, 11, 12, 16}, {16, 12, 9, 13}, {2, 3, 11, 10}, {3, 4, 12, 11}, {4, 1, 9, 12}, {6, 5, 13, 14}, {7, 6, 14, 15}, {8, 7, 15, 16}, {5, 8, 16, 13}, {1, 20, 17, 9}, {17, 18, 10, 9}, {18, 19, 2, 10}, {19, 20, 1, 2}, {26, 25, 21, 22}, {27, 26, 22, 23}, {28, 27, 23, 24}, {25, 28, 24, 21}, {24, 23, 22, 21}, {17, 18}, {18, 19}, {19, 20}, {20, 17}, {25, 26}, {26, 27}, {27, 28}, {28, 25}, {24}, {23}, {22}, {21}}, {{\(-3\), 3, 1, 1, 1, 0}, {3, 3, 1, 1, 1, 0}, {3, \(-3\), 1, 1, 1, 0}, {\(-3\), \(-3\), 1, 1, 1, 0}, {\(-2.5\), 2.5, 1, 1, 1, 0}, {2.5, 2.5, 1, 1, 1, 0}, {2.5, \(-2.5\), 1, 1, 1, 0}, {\(-2.5\), \(-2.5\), 1, 1, 1, 0}, {\(-3\), 3, \(-1\), 1, 1, 0}, {3, 3, \(-1\), 1, 1, 0}, {3, \(-3\), \(-1\), 1, 1, 0}, {\(-3\), \(-3\), \(-1\), 1, 1, 0}, {\(-2.5\), 2.5, \(-1\), 1, 1, 0}, {2.5, 2.5, \(-1\), 1, 1, 0}, {2.5, \(-2.5\), \(-1\), 1, 1, 0}, {\(-2.5\), \(-2.5\), \(-1\), 1, 1, 0}, {\(- .5\), 3, \(- .5\), 1, 1, 0}, { .5, 3, \(- .5\), 1, 1, 0}, { .5, 3, .5, 1, 1, 0}, {\(- .5\), 3, .5, 1, 1, 0}, {\(-1\), 4, \(-1\), 1, 1, 1}, {1, 4, \(-1\), 1, 1, 1}, {1, 4, 1, 1, 1, 1}, {\(-1\), 4, 1, 1, 1, 1}, {\(- .5\), 3, \(- .5\), 1, 1, 1}, { .5, 3, \(- .5\), 1, 1, 1}, { .5, 3, .5, 1, 1, 1}, {\(- .5\), 3, .5, 1, 1, 1}}};\)\(\[IndentingNewLine]\) \)\), "\[IndentingNewLine]", \(\(colorAxe = {{{1, 2, 3, 10}, {8, 9, 10, 3}, {2, 3, 8, 9}, {3, 4, 7, 8}, {4, 5, 6, 7}, {2}, {9}, {2, 1}, {1, 10}, {10, 9}, {2, 3}, {3, 4}, {4, 5}, {5, 6}, {6, 7}, {7, 8}, {8, 9}, {5}, {6}, {11, 20, 13, 12}, {18, 13, 20, 19}, {12, 19, 18, 13}, {13, 18, 17, 14}, {14, 17, 16, 15}, {12}, {19}, {12, 11}, {11, 20}, {20, 19}, {12, 13}, {13, 14}, {14, 15}, {15, 16}, {16, 17}, {17, 18}, {18, 19}, {15}, {16}, {9, 8, 18, 19}, {8, 7, 17, 18}, {7, 6, 16, 17}, {3, 2, 12, 13}, {4, 3, 13, 14}, {5, 4, 14, 15}, {21, 30, 23, 22}, {28, 23, 30, 29}, {22, 29, 28, 23}, {23, 28, 27, 24}, {24, 27, 26, 25}, {22}, {29}, {22, 21}, {21, 30}, {30, 29}, {22, 23}, {23, 24}, {24, 25}, {25, 26}, {26, 27}, {27, 28}, {28, 29}, {25}, {26}, {31, 32, 33, 40}, {38, 39, 40, 33}, {32, 33, 38, 39}, {33, 34, 37, 38}, {34, 35, 36, 37}, {32}, {39}, {32, 31}, {31, 40}, {40, 39}, {32, 33}, {33, 34}, {34, 35}, {35, 36}, {36, 37}, {37, 38}, {38, 39}, {35}, {36}, {29, 39, 38, 28}, {28, 38, 37, 27}, {27, 37, 36, 26}, {23, 33, 32, 22}, {24, 34, 33, 23}, {25, 35, 34, 24}, {41, 42}, {42, 43}, {43, 44}, {44, 41}, {45, 46}, {46, 47}, {47, 48}, {48, 45}, {45, 41, 42, 46}, {46, 42, 43, 47}, {47, 43, 44, 48}, {48, 44, 41, 45}, {48, 45, 46, 47}, {41, 44, 43, 42}}, {{\(-4.0\), \(-2.0\), 0.0, .5, .5, .5}, {\(-3.0\), \(-3.0\), 0.0, .5, .5, .5}, {\(-3.1\), \(-2.0\), 0.2, .5, .5, .5}, {\(-2.0\), \(-1.0\), 0.3, .5, .5, .5}, {0.0, \(-1.0\), 0.5, .5, .5, .5}, {0.0, 1.0, 0.5, .5, .5, .5}, {\(-2.0\), 1.0, 0.3, .5, .5, .5}, {\(-3.1\), 2.0, 0.2, .5, .5, .5}, {\(-3.0\), 3.0, 0.0, .5, .5, .5}, {\(-4.0\), 2.0, 0.0, .5, .5, .5}, {\(-4.0\), \(-2.0\), 0.0, .5, .5, .5}, {\(-3.0\), \(-3.0\), 0.0, .5, .5, .5}, {\(-3.1\), \(-2.0\), \(-0.2\), .5, .5, \ .5}, {\(-2.0\), \(-1.0\), \(-0.3\), .5, .5, .5}, {0.0, \(-1.0\), \(-0.5\), \ .5, .5, .5}, {0.0, 1.0, \(-0.5\), .5, .5, .5}, {\(-2.0\), 1.0, \(-0.3\), .5, .5, .5}, {\(-3.1\), 2.0, \(-0.2\), .5, .5, .5}, {\(-3.0\), 3.0, 0.0, .5, .5, .5}, {\(-4.0\), 2.0, 0.0, .5, .5, .5}, {4.0, \(-2.0\), 0.0, .5, .5, .5}, {3.0, \(-3.0\), 0.0, .5, .5, .5}, {3.1, \(-2.0\), 0.2, .5, .5, .5}, {2.0, \(-1.0\), 0.3, .5, .5, .5}, {\(-0.0\), \(-1.0\), 0.5, .5, .5, .5}, {\(-0.0\), 1.0, 0.5, .5, .5, .5}, {2.0, 1.0, 0.3, .5, .5, .5}, {3.1, 2.0, 0.2, .5, .5, .5}, {3.0, 3.0, 0.0, .5, .5, .5}, {4.0, 2.0, 0.0, .5, .5, .5}, {4.0, \(-2.0\), 0.0, .5, .5, .5}, {3.0, \(-3.0\), 0.0, .5, .5, .5}, {3.1, \(-2.0\), \(-0.2\), .5, .5, .5}, \ {2.0, \(-1.0\), \(-0.3\), .5, .5, .5}, {\(-0.0\), \(-1.0\), \(-0.5\), .5, \ .5, .5}, {\(-0.0\), 1.0, \(-0.5\), .5, .5, .5}, {2.0, 1.0, \(-0.3\), .5, .5, .5}, {3.1, 2.0, \(-0.2\), .5, .5, .5}, {3.0, 3.0, 0.0, .5, .5, .5}, {4.0, 2.0, 0.0, .5, .5, .5}, {\(- .75\), 2, \(- .75\), .5, .25, 0}, { .75, 2, \(- .75\), .5, .25, 0}, { .75, 2, .75, .5, .25, 0}, {\(- .75\), 2, .75, .5, .25, 0}, {\(- .75\), \(-10\), \(- .75\), .5, .25, 0}, { .75, \(-10\), \(- .75\), .5, .25, 0}, { .75, \(-10\), 1, .5, .25, 0}, {\(- .75\), \(-10\), .75, .5, .25, 0}}};\)\)}], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(displayMeshColor\)]], " takes mesh whose vertex information includes an RGB value and rendering \ the mesh using the average of the RGB values at the corner of each polygonal \ face." }], "Text"], Cell[BoxData[{ \(\(Unprotect[RGBColor];\)\), "\n", \(RGBColor[{a_, b_, c_}] := RGBColor[a, b, c]\), "\[IndentingNewLine]", \(\(\(Protect[RGBColor];\)\(\[IndentingNewLine]\) \)\), "\[IndentingNewLine]", \(displayMeshColor[{T_, G_}, opts___] := \[IndentingNewLine]Show[ Graphics3D[ Table[{\[IndentingNewLine]SurfaceColor[ RGBColor[\(1\/4\) Apply[Plus, G\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket], {4, 5, 6}\[RightDoubleBracket]]]], \ \[IndentingNewLine]Polygon[ G\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket], {1, 2, 3}\[RightDoubleBracket]]}, {i, Length[T]}]], opts]\)}], "Input", InitializationCell->True], Cell["Examples", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(displayMeshColor[colorCube]\), "\[IndentingNewLine]", \(displayMeshColor[colorRing]\), "\[IndentingNewLine]", \(displayMeshColor[colorAxe]\)}], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics3D \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics3D \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics3D \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Orientation testing for polyhedral meshes", "Subsubsection"], Cell[TextData[{ Cell[BoxData[ \(orientationTest\)]], " draws front (counterclockwise) faces white and back (clockwise) faces as \ black. Note that all of the meshes defined above are oriented so that \ counterclockwise faces point outward." }], "Text"], Cell[BoxData[ \(orientationTest[{T_, G_}] := \[IndentingNewLine]Show[ Graphics3D[ Table[{FaceForm[GrayLevel[1], GrayLevel[0]], Polygon[G\[LeftDoubleBracket] T\[LeftDoubleBracket]i\[RightDoubleBracket], {1, 2, 3}\[RightDoubleBracket]]}, {i, Length[T]}]], Lighting \[Rule] False]\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(orientationTest[doughnut]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics3D \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Topological subdivision of polyhedral meshes", "Subsection"], Cell[CellGroupData[{ Cell["A code fragment for maintaining a hash table on edges", "Subsubsection"], Cell[TextData[{ "A fragment of ", StyleBox["Mathematica", FontSlant->"Italic"], " code that maintains a hash table suitable for vertex lookup. The \ variable ", Cell[BoxData[ \(idx\)]], " is table that takes the indices at the endpoints of an edge and returns a \ unique index for the edge." }], "Text"], Cell[BoxData[{ \( (*\ define\ an\ order\ independent\ hash\ table\ idx, \ intialize\ it\ to\ zero\ *) \ \[IndentingNewLine]\[IndentingNewLine]\(SetAttributes[idx, Orderless];\)\), "\[IndentingNewLine]", \(\(idx[_, _] = 0;\)\[IndentingNewLine]\[IndentingNewLine] (*\ lookup\ function\ index, \ increments\ global\ counter\ currIndex\ when\ new\ vertex\ is\ \ encountered\ *) \[IndentingNewLine]\), "\[IndentingNewLine]", \(\(index[i_, j_] := If[idx[i, j] == 0, idx[i, j] = \(++currIndex\), idx[i, j]];\)\)}], "Input"] }, Closed]], Cell[CellGroupData[{ Cell["Linear subdivision for polyedhral meshes", "Subsubsection"], Cell[TextData[{ Cell[BoxData[ \(quadSub[{T, p}]\)]], " applies bi\[Hyphen]linear subdivision to quad mesh with topology ", Cell[BoxData[ \(T\)]], " and geometry ", Cell[BoxData[ \(p\)]], ", maintain consistent orientation" }], "Text"], Cell[BoxData[ RowBox[{\(quadSub[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({idx, index, currIndex = Length[p], newT, newp}\), ",", "\n", "\[IndentingNewLine]", \( (*\ define\ an\ order\ independent\ hash\ table\ idx, \ intialize\ it\ to\ zero, \[IndentingNewLine]\ lookup\ function\ index, \ increments\ global\ counter\ currIndex\ when\ new\ vertex\ is\ \ encountered\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{\(SetAttributes[idx, Orderless]\), ";", "\[IndentingNewLine]", \(idx[_, _] = 0\), ";", "\[IndentingNewLine]", \(index[i_, j_] := If[idx[i, j] == 0, idx[i, j] = \(++currIndex\), idx[i, j]]\), ";", "\n", "\n", "\[IndentingNewLine]", \( (*\ allocate\ table\ of\ size\ sufficient\ to\ hold\ new\ vertex\ \ locations\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", \(newp = Table[0, {2 Length[T] + 2 Length[p] + 10}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ subdivide\ mesh\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{"newT", "=", RowBox[{"Flatten", "[", RowBox[{ RowBox[{"Table", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"With", "[", RowBox[{\({i00 = T\[LeftDoubleBracket]l, 1\[RightDoubleBracket], i20 = T\[LeftDoubleBracket]l, 2\[RightDoubleBracket], i22 = T\[LeftDoubleBracket]l, 3\[RightDoubleBracket], i02 = T\[LeftDoubleBracket]l, 4\[RightDoubleBracket]}\), ",", "\[IndentingNewLine]", RowBox[{"With", "[", RowBox[{\({i01 = index[i00, i02], i12 = index[i02, i22], i10 = index[i00, i20], i21 = index[i20, i22], i11 = \(++currIndex\)}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ update\ geometric\ info\ in\ newG\ *) \), "\[IndentingNewLine]", RowBox[{ RowBox[{\(newp\[LeftDoubleBracket]{i00, i20, i22, i02, i10, i21, i12, i01, i11}\[RightDoubleBracket]\), "=", RowBox[{\(1\/4\), RowBox[{ RowBox[{"(", GridBox[{ {"4", "0", "0", "0"}, {"0", "4", "0", "0"}, {"0", "0", "4", "0"}, {"0", "0", "0", "4"}, {"2", "2", "0", "0"}, {"0", "2", "2", "0"}, {"0", "0", "2", "2"}, {"2", "0", "0", "2"}, {"1", "1", "1", "1"} }], ")"}], ".", \(p\[LeftDoubleBracket]T\ \[LeftDoubleBracket]l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ create\ four\ subtriangles, \ keep\ orientation\ consistent\ *) \), "\[IndentingNewLine]", \({{i00, i10, i11, i01}, \[IndentingNewLine]{i02, i01, i11, i12}, \[IndentingNewLine]{i20, i21, i11, i10}, \[IndentingNewLine]{i22, i12, i11, i21}}\)}]}], "]"}]}], "]"}], ",", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ",", "1"}], "]"}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ return\ topology\ plus\ part\ of\ newG\ that\ was\ actually\ \ used\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", \({newT, Take[newp, currIndex]}\)}]}], "]"}]}]], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(triSub[{T, p}]\)]], " performs linear subdivision on a triangle mesh with topology ", Cell[BoxData[ \(T\)]], " and geometry ", Cell[BoxData[ \(p\)]] }], "Text"], Cell[BoxData[ RowBox[{\(triSub[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({idx, index, currIndex = Length[p], newT, newp}\), ",", "\n", "\[IndentingNewLine]", \( (*\ define\ an\ order\ independent\ hash\ table\ idx, \ intialize\ it\ to\ zero, \[IndentingNewLine]\ lookup\ function\ index, \ increments\ global\ counter\ currIndex\ when\ new\ vertex\ is\ \ encountered\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{\(SetAttributes[idx, Orderless]\), ";", "\[IndentingNewLine]", \(idx[_, _] = 0\), ";", "\[IndentingNewLine]", \(index[i_, j_] := If[idx[i, j] == 0, idx[i, j] = \(++currIndex\), idx[i, j]]\), ";", "\n", "\n", "\[IndentingNewLine]", \( (*\ allocate\ table\ of\ size\ sufficient\ to\ hold\ new\ vertex\ \ locations\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", \(newp = Table[0, {Length[T] + 2 Length[p] + 10}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ subdivide\ mesh\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{"newT", "=", RowBox[{"Flatten", "[", RowBox[{ RowBox[{"Table", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"With", "[", RowBox[{\({i0 = T\[LeftDoubleBracket]l, 1\[RightDoubleBracket], i1 = T\[LeftDoubleBracket]l, 2\[RightDoubleBracket], i2 = T\[LeftDoubleBracket]l, 3\[RightDoubleBracket]}\), ",", "\[IndentingNewLine]", RowBox[{"With", "[", RowBox[{\({i01 = index[i0, i1], i12 = index[i1, i2], i02 = index[i0, i2]}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ update\ geometric\ info\ in\ newG\ *) \), "\[IndentingNewLine]", RowBox[{ RowBox[{\(newp\[LeftDoubleBracket]{i0, i1, i2, i01, i12, i02}\[RightDoubleBracket]\), "=", RowBox[{\(1\/2\), RowBox[{ RowBox[{"(", GridBox[{ {"2", "0", "0"}, {"0", "2", "0"}, {"0", "0", "2"}, {"1", "1", "0"}, {"0", "1", "1"}, {"1", "0", "1"} }], ")"}], ".", \(p\[LeftDoubleBracket]T\ \[LeftDoubleBracket]l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ create\ four\ subtriangles\ *) \), "\[IndentingNewLine]", \({{i0, i01, i02}, {i01, i1, i12}, {i02, i12, i2}, {i12, i02, i01}}\)}]}], "]"}]}], "]"}], ",", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ",", "1"}], "]"}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ return\ topology\ plus\ part\ of\ newG\ that\ was\ actually\ \ used\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", \({newT, Take[newp, currIndex]}\)}]}], "]"}]}]], "Input", InitializationCell->True], Cell[TextData[{ "Examples of ", Cell[BoxData[ \(triSub\)]], " and ", Cell[BoxData[ \(quadSub\)]], " applied to the octahedron and cube, respectively." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{displayMesh[Nest[triSub, octa, 3]], displayMesh[Nest[quadSub, cube, 3]]}]]\)], "Input", CellTags->"FIG oct and cube three rounds"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Topological subdivision diagrams", "Subsubsection"], Cell["Helper functions for topological splits", "Text"], Cell[BoxData[ \(nGon[n_] := Table[{Sin[\(2 \[Pi]\ i\)\/n + \[Pi]\/n], \(-Cos[\(2 \[Pi]\ i\)\/n + \ \[Pi]\/n]\)}, {i, 0, n - 1}]\)], "Input", InitializationCell->True], Cell[BoxData[ \(midpt[p_] := Append[Table[\(p\[LeftDoubleBracket]i\[RightDoubleBracket] + p\ \[LeftDoubleBracket]i + 1\[RightDoubleBracket]\)\/2, {i, 1, Length[p] - 1}], \(p\[LeftDoubleBracket]1\[RightDoubleBracket] + \ Last[p]\)\/2]\)], "Input", InitializationCell->True], Cell[BoxData[ \(triSplit[n_] := \[IndentingNewLine]Graphics[ With[{p = nGon[n]}, \[IndentingNewLine]{Thickness[0.01], Line[Append[p, First[p]]], \[IndentingNewLine]PointSize[0.04], Table[Point[p\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, n}], \[IndentingNewLine]With[{m = midpt[p]}, \[IndentingNewLine]{Dashing[{0.05}], Line[Append[m, First[m]]], \[IndentingNewLine]GrayLevel[ 0.75], Table[ Point[m\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, n}]}]}]]\)], "Input", InitializationCell->True], Cell[BoxData[ \(quadSplit[n_] := \[IndentingNewLine]Graphics[ With[{p = nGon[n]}, \[IndentingNewLine]{Thickness[0.01], Line[Append[p, First[p]]], \[IndentingNewLine]PointSize[0.04], Table[Point[p\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, n}], \[IndentingNewLine]With[{m = midpt[p]}, \[IndentingNewLine]{Dashing[{0.05}], Table[Line[{{0, 0}, m\[LeftDoubleBracket]i\[RightDoubleBracket]}], {i, n}], \[IndentingNewLine]GrayLevel[0.75], Table[Point[m\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, n}], Point[{0, 0}]}]}]]\)], "Input", InitializationCell->True], Cell["FIgure showing triangular and quad splits", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Table[ Show[triSplit[i], AspectRatio \[Rule] 1], {i, 3, 5}], Table[Show[quadSplit[i], AspectRatio \[Rule] 1], {i, 3, 5}]}]]\)], "Input", CellTags->"FIG Topological subdivision"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["4-8 subdivision figure", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(g1 = Show[Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{{0, 0}, {2, 0}, {2, 2}, {0, 2}, {0, 0}}], \[IndentingNewLine]Line[{{0, 0}, {2, 2}}], \[IndentingNewLine]Dashing[{0.05}], Line[{{2, 0}, {0, 2}}], \[IndentingNewLine]Point[{0, 0}], Point[{2, 0}], Point[{2, 2}], Point[{0, 2}], \[IndentingNewLine]GrayLevel[0.75], Point[{1, 1}]}], AspectRatio \[Rule] 1]\), "\[IndentingNewLine]", \(g2 = Show[Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{{0, 0}, {2, 0}, {2, 2}, {0, 2}, {0, 0}}], \[IndentingNewLine]Line[{{0, 0}, {2, 2}}], Line[{{2, 0}, {0, 2}}], \[IndentingNewLine]Dashing[{0.05}], Line[{{1, 0}, {1, 2}}], Line[{{0, 1}, {2, 1}}], \[IndentingNewLine]Point[{0, 0}], Point[{2, 0}], Point[{2, 2}], Point[{0, 2}], Point[{1, 1}], \[IndentingNewLine]GrayLevel[0.75], Point[{1, 0}], Point[{2, 1}], Point[{1, 2}], Point[{0, 1}]}], AspectRatio \[Rule] 1]\), "\[IndentingNewLine]", \(Show[GraphicsArray[{g1, g2}]]\)}], "Input", CellTags->"FIG 4-8 subdivision"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Smooth subdivision for quad meshes", "Section"], Cell[CellGroupData[{ Cell["Bilinear subdivision plus quad averaging", "Subsection"], Cell[CellGroupData[{ Cell[TextData[{ "Initial version of ", Cell[BoxData[ \(quadAverage\)]] }], "Subsubsection"], Cell[TextData[{ "The function ", Cell[BoxData[ \(quadAverage\)]], " applies quad averaging to a quadrilateral mesh ", Cell[BoxData[ \({T, p}\)]], ". It does not account for the existence of crease edges and vertices" }], "Text"], Cell[BoxData[ RowBox[{\(quadAverage[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({newp = 0*p, \ val = Table[0, {Length[p]}]}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ compute\ table\ of\ vertex\ valences\ *) \), "\[IndentingNewLine]", RowBox[{\(Do[\(++val\[LeftDoubleBracket] T\[LeftDoubleBracket]l, i\[RightDoubleBracket]\[RightDoubleBracket]\), \ \[IndentingNewLine]{l, Length[T]}, {i, Length[T\[LeftDoubleBracket]l\[RightDoubleBracket]]}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ apply\ smoothing\ mask\ to\ each\ cell\ and\ accumulate\ \ results*) \), "\[IndentingNewLine]", RowBox[{"Do", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{\(newp\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\), "+=", " ", RowBox[{\(1\/\(4 val\[LeftDoubleBracket]T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\)\), RowBox[{ RowBox[{"(", GridBox[{ {"1", "1", "1", "1"}, {"1", "1", "1", "1"}, {"1", "1", "1", "1"}, {"1", "1", "1", "1"} }], ")"}], ".", \(p\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}], ",", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \({T, newp}\)}]}], "]"}]}]], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Examples", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{displayMesh[cube, PlotRange \[Rule] {{0, 1.01}, {0, 1.01}, {0, 1.01}}], \[IndentingNewLine]displayMesh[quadSub[cube], PlotRange \[Rule] {{0, 1.01}, {0, 1.01}, {0, 1.01}}], \[IndentingNewLine]displayMesh[ quadAverage[quadSub[cube]], PlotRange \[Rule] {{0, 1.01}, {0, 1.01}, {0, 1.01}}], \[IndentingNewLine]displayMesh[ quadSub[quadAverage[quadSub[cube]]], PlotRange \[Rule] {{0, 1.01}, {0, 1.01}, {0, 1.01}}], \[IndentingNewLine]displayMesh[ quadAverage[quadSub[quadAverage[quadSub[cube]]]], PlotRange \[Rule] {{0, 1.01}, {0, 1.01}, {0, 1.01}}]}]]\)], "Input", CellTags->"FIG two rounds of cube subdivision"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["HENRIK: BUILD CODE FOR FIGURE 7.6", "Text", FontColor->RGBColor[0, 1, 0]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{displayMesh[ Nest[Composition[quadAverage, quadSub], doughnut, 0], PlotRange \[Rule] {{\(-3.01\), 3.01}, {\(-3.01\), 3.01}, {\(-1.01\), 1.01}}], \[IndentingNewLine]displayMesh[ Nest[Composition[quadAverage, quadSub], doughnut, 1], PlotRange \[Rule] {{\(-3\), 3}, {\(-3\), 3}, {\(-1\), 1}}], \[IndentingNewLine]displayMesh[ Nest[Composition[quadAverage, quadSub], doughnut, 2], PlotRange \[Rule] {{\(-3\), 3}, {\(-3\), 3}, {\(-1\), 1}}], \[IndentingNewLine]displayMesh[ Nest[Composition[quadAverage, quadSub], doughnut, 3], PlotRange \[Rule] {{\(-3\), 3}, {\(-3\), 3}, {\(-1\), 1}}]}]]\)], "Input", CellTags->"FIG doughnut"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["Extra non\[Hyphen]manifold example", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{doubleCube = {{{1, 2, 4, 3}, {5, 6, 8, 7}, {1, 3, 7, 5}, {2, 4, 8, 6}, {1, 5, 6, 2}, {3, 7, 8, 4}, \[IndentingNewLine]{7, 8, 10, 9}, {11, 12, 14, 13}, {7, 8, 12, 11}, {7, 9, 13, 11}, {9, 10, 14, 13}, {8, 10, 14, 12}}, \[IndentingNewLine]{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}, {0, 0, 1}, {1, 0, 1}, {0, 1, 1}, {1, 1, 1}, \[IndentingNewLine]{0, 2, 1}, {1, 2, 1}, {0, 1, 2}, {1, 1, 2}, {0, 2, 2}, {1, 2, 2}}}}, \[IndentingNewLine]displayMesh[ Nest[Composition[quadAverage, quadSub], doubleCube, 3]]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics3D \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Comparison to other quad schemes", "Subsection"], Cell[CellGroupData[{ Cell["Catmull\[Hyphen]Clark using matrix updates", "Subsubsection", CellTags->"SUBSEC catmull clark matrix update"], Cell[TextData[{ "The function ", Cell[BoxData[ \(ccAverage\)]], " implement Catmull\[Hyphen]Clark subdivision as smoothing pass over a quad \ mesh that has been subdivided using bilinear subdivision. This smoothing \ algorithm is implemented using a matrix update scheme similar that described \ for Loop subdivision in section 7.3.2." }], "Text"], Cell[BoxData[ RowBox[{\(ccAverage[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({newp = 0*p, \ val = Table[0, {Length[p]}]}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ compute\ table\ of\ vertex\ valences\ *) \), "\[IndentingNewLine]", RowBox[{\(Do[\(++val\[LeftDoubleBracket] T\[LeftDoubleBracket]l, i\[RightDoubleBracket]\[RightDoubleBracket]\), \ \[IndentingNewLine]{l, Length[T]}, {i, Length[T\[LeftDoubleBracket]l\[RightDoubleBracket]]}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ apply\ smoothing\ mask\ to\ each\ cell\ and\ accumulate\ \ results*) \), "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{"With", "[", RowBox[{\({a = 1\/val\[LeftDoubleBracket]T\[LeftDoubleBracket]l\ \[RightDoubleBracket]\[RightDoubleBracket]}\), ",", "\[IndentingNewLine]", RowBox[{\(newp\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\), "+=", " ", RowBox[{\(1\/val\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\), RowBox[{ RowBox[{"(", GridBox[{ {\(1 - 3 a\[LeftDoubleBracket]1\ \[RightDoubleBracket]\), \(a\[LeftDoubleBracket]1\[RightDoubleBracket]\), \(a\ \[LeftDoubleBracket]1\[RightDoubleBracket]\), \(a\[LeftDoubleBracket]1\ \[RightDoubleBracket]\)}, {\(a\[LeftDoubleBracket]2\[RightDoubleBracket]\ \), \(1 - 3 a\[LeftDoubleBracket]2\ \[RightDoubleBracket]\), \(a\[LeftDoubleBracket]2\[RightDoubleBracket]\), \(a\ \[LeftDoubleBracket]2\[RightDoubleBracket]\)}, {\(a\[LeftDoubleBracket]3\[RightDoubleBracket]\ \), \(a\[LeftDoubleBracket]3\[RightDoubleBracket]\), \(1 - 3 a\[LeftDoubleBracket]3\ \[RightDoubleBracket]\), \(a\[LeftDoubleBracket]3\[RightDoubleBracket]\)}, {\(a\[LeftDoubleBracket]4\[RightDoubleBracket]\ \), \(a\[LeftDoubleBracket]4\[RightDoubleBracket]\), \(a\[LeftDoubleBracket]4\ \[RightDoubleBracket]\), \(1 - 3 a\[LeftDoubleBracket]4\ \[RightDoubleBracket]\)} }], ")"}], ".", \(p\[LeftDoubleBracket]T\[LeftDoubleBracket]l\ \[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}]}], "]"}], ",", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \({T, newp}\)}]}], "]"}]}]], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]displayMesh[ Nest[Composition[quadAverage, quadSub], cube, 3]], displayMesh[ Nest[Composition[ccAverage, quadSub], cube, 3]]}]]\)], "Input", CellTags->"FIG comparison of quad cubes"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Figures for quad subdivision rules", "Subsubsection"], Cell[BoxData[ \(nQuads[ n_] := \[IndentingNewLine]{Join[ Table[{1, i, n + i, i + 1}, {i, 2, n}], {{1, n + 1, 2 n + 1, 2}}], \[IndentingNewLine]Join[{{0, 0}}, \[IndentingNewLine]0.75 Table[{Cos[\(2 \[Pi]\ i\)\/n], Sin[\(2\ \[Pi]\ i\)\/n]} // N, {i, 0, n - 1}], \[IndentingNewLine]0.75 Table[{Cos[\(2 \[Pi]\ i\)\/n] + Cos[\(2 \[Pi]\ \((i + 1)\)\)\/n], Sin[\(2\ \[Pi]\ i\)\/n] + Sin[\(2 \[Pi]\ \((i + 1)\)\)\/n]} // N, {i, 0, n - 1}]]}\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]displayTaggedMesh[{{{1, 2, 3, 4}}, \(1\/2\) {{1, 1}, {1, \(-1\)}, {\(-1\), \(-1\)}, {\(-1\), 1}}}, {1\/4, 1\/4, 1\/4, 1\/4}, {{\(-1\), \(-1\)}, {\(-1\), 1}, {1, 1}, {1, \(-1\)}}, {{\(-1.3\), 1.3}, {\(-1.3\), 1.3}}], \[IndentingNewLine]displayTaggedMesh[{{{1, 2, 3, 4}, {1, 2, 5, 6}}, \(1\/2\) {{\(-1\), 0}, {1, 0}, {1, 2}, {\(-1\), 2}, {1, \(-2\)}, {\(-1\), \(-2\)}}}, {3\/8, 3\/8, 1\/16, 1\/16, 1\/16, 1\/16}, {{1, 0}, {\(-1\), 0}, {\(-1\), \(-1\)}, {1, \(-1\)}, {\(-1\), 1}, {1, 1}}, {{\(-1.3\), 1.3}, {\(-1.3\), 1.3}}], \[IndentingNewLine]displayTaggedMesh[{{{1, 2, 3, 4}, {1, 2, 5, 6}, {1, 7, 8, 4}, {1, 7, 9, 6}}, {{0, 0}, {1, 0}, {1, 1}, {0, 1}, {1, \(-1\)}, {0, \(-1\)}, {\(-1\), 0}, {\(-1\), 1}, {\(-1\), \(-1\)}}}, {9\/16, 3\/32, 1\/64, 3\/32, 1\/64, 3\/32, 3\/32, 1\/64, 1\/64}, {{1, 1}, {\(-1\), 0}, {\(-1\), \(-1\)}, {0, \(-1\)}, {\(-1\), 1}, {0, 1}, {1, 0}, {1, \(-1\)}, {1, 1}}, {{\(-1.3\), 1.3}, {\(-1.3\), 1.3}}]}]]\)], "Input", CellTags->"FIG quad face/edge rules"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]displayTaggedMesh[ nQuads[5], \[IndentingNewLine]{9\/16, 3\/\(8 n\), 3\/\(8 n\), 3\/\(8 n\), 3\/\(8 n\), 3\/\(8 n\), 1\/\(16 n\), 1\/\(16 n\), 1\/\(16 n\), 1\/\(16 n\), 1\/\(16 n\)}, \[IndentingNewLine]{{1.5, 0}, {\(-1\), 0}, {\(-1\), \(-1\)}, {1, \(-1\)}, {1, 1}, {\(-0.5\), 1}, {0, \(-1\)}, {0, \(-1\)}, {1, 0}, {0, 1}, {0, 1}}, {{\(-1.4\), 1.4}, {\(-1.4\), 1.4}}], \[IndentingNewLine]displayTaggedMesh[ nQuads[5], \[IndentingNewLine]{1 - 7\/\(4 n\), 3\/\(2 n\^2\), 3\/\(2 n\^2\), 3\/\(2 n\^2\), 3\/\(2 n\^2\), 3\/\(2 n\^2\), 1\/\(4 n\^2\), 1\/\(4 n\^2\), 1\/\(4 n\^2\), 1\/\(4 n\^2\), 1\/\(4 n\^2\)}, \[IndentingNewLine]{{1.5, 0}, {\(-1\), 0}, {\(-1\), \(-1\)}, {1, \(-1\)}, {1, 1}, {\(-0.5\), 1}, {0, \(-1\)}, {0, \(-1\)}, {1, 0}, {0, 1}, {0, 1}}, {{\(-1.4\), 1.4}, {\(-1.4\), 1.4}}]}]]\)], "Input", CellTags->"FIG quad rules"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Weighted averaging for surfaces of revolution", "Subsection"], Cell["\<\ Weighted averaging is implemented in a separate, auxiliary notebook \ \"meshes.nb\" that is available on the same web page where this notebook \ resides. This implementation uses a slightly difference mesh representation \ that allows the incorporation of both tensions and creases in simple compact \ manner. Please consult this notebook for the code used to generate figures \ 7.15-7.18.\ \>", "Text"], Cell[CellGroupData[{ Cell["Figure for weighted averaging", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ Graphics[\[IndentingNewLine]{Thickness[0.01], Line[{{1, 1}, {1, \(-1\)}}], Line[{{0, 1}, {0, \(-1\)}}], Line[{{\(-1\), 1}, {\(-1\), \(-1\)}}], \[IndentingNewLine]Line[{{1, 1}, {\(-1\), 1}}], Line[{{1, 0}, {\(-1\), 0}}], Line[{{\(-1\), \(-1\)}, {1, \(-1\)}}], \[IndentingNewLine]PointSize[ 0.04], Point[{0, 0}], \[IndentingNewLine]Dashing[{0.05}], Thickness[ 0.01], \[IndentingNewLine]Line[{{1\/3, 1}, {1\/3, \(-1\)}}], Line[{{\(-1\)\/3, 1}, {\(-1\)\/3, \(-1\)}}], \[IndentingNewLine]Line[{{1, 1\/3}, {\(-1\), 1\/3}}], Line[{{1, \(-1\)\/3}, {\(-1\), \(-1\)\/3}}], \ \[IndentingNewLine]GrayLevel[0.5], Point[{1\/3, 1\/3}], \[IndentingNewLine]Point[{\(-\(1\/3\)\), 1\/3}], Point[{1\/3, \(-\(1\/3\)\)}], Point[{\(-\(1\/3\)\), \(-\(1\/3\)\)}], \[IndentingNewLine]GrayLevel[ 0], \[IndentingNewLine]Text[ HoldForm[\(\[Sigma]\_k\) \[Rho]\_k], {1\/6, 1\/8}], Text[HoldForm[1], {7\/8, 7\/8}], \[IndentingNewLine]Text[ HoldForm[\[Sigma]\_k], {1\/8, 7\/8}], Text[HoldForm[\[Rho]\_k], {7\/8, 1\/8}], \[IndentingNewLine]Text[ v, {\(-1\)\/16, \(-1\)\/16}], Text[u, {17\/16, \(-1\)\/16}], Text[t, {\(-1\)\/16, 17\/16}], Text[s, {17\/16, 17\/16}]}], TextStyle \[Rule] {FontSize \[Rule] 14}, AspectRatio \[Rule] 1]\)], "Input", CellTags->"FIG weighted centroids"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[BoxData[ \(genCoarse[{T_, p_}] := Graphics[\[IndentingNewLine]{Thickness[0.01], Table[Line[ p\[LeftDoubleBracket]Join[ T\[LeftDoubleBracket] i\[RightDoubleBracket], {T\[LeftDoubleBracket]i, 1\[RightDoubleBracket]}]\[RightDoubleBracket]], {i, Length[T]}], \[IndentingNewLine]PointSize[ 0.04], \[IndentingNewLine]Table[ Point[p\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, Length[p]}]}]\)], "Input", InitializationCell->True], Cell[BoxData[ \(genFine[{T_, p_}] := Graphics[\[IndentingNewLine]{Dashing[{0.03}], Thickness[0.01], Table[Line[ p\[LeftDoubleBracket]Join[ T\[LeftDoubleBracket] i\[RightDoubleBracket], {T\[LeftDoubleBracket]i, 1\[RightDoubleBracket]}]\[RightDoubleBracket]], {i, Length[T]}], \[IndentingNewLine]PointSize[0.04], GrayLevel[0.75], \[IndentingNewLine]Table[ Point[p\[LeftDoubleBracket]i\[RightDoubleBracket]], {i, Length[p]}]}]\)], "Input", InitializationCell->True], Cell[BoxData[ \(nDegTris[ n_] := \[IndentingNewLine]{Join[ Table[{1, 1, i, i + 1}, {i, 2, n}], {{1, 1, n + 1, 2}}], \[IndentingNewLine]Join[{{0, 0}}, Table[{Cos[\(2 \[Pi]\ i\)\/n], Sin[\(2\ \[Pi]\ i\)\/n]} // N, {i, 0, n - 1}]]}\)], "Input", InitializationCell->True], Cell[BoxData[ \(genFine[{T_, p_}] := Graphics[\[IndentingNewLine]{Dashing[{0.03}], Thickness[0.005], Table[\[IndentingNewLine]Table[ Line[Sort[ p\[LeftDoubleBracket]{T\[LeftDoubleBracket]i, j\[RightDoubleBracket], T\[LeftDoubleBracket]i, j + 1\[RightDoubleBracket]}\[RightDoubleBracket]]], \ \[IndentingNewLine]{j, Length[T\[LeftDoubleBracket]i\[RightDoubleBracket]] - 1}], {i, Length[T]}]}]\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[genFine[quadSub[nDegTris[6]]], genCoarse[nDegTris[6]], AspectRatio \[Rule] 1]\)], "Input", CellTags->"FIG pole"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Averaging for quad meshes with embedded creases", "Subsection", CellTags->"SEC creases"], Cell[TextData[{ "This section contains a ", StyleBox["Mathematica", FontSlant->"Italic"], " implementation for quad averaging in the presence of creases. The \ implementation in this section works on meshes defined using the flattened \ polyhedral representation of section 7.2.1. The auxiliary notebook \ \"meshes.nb\" contains more examples of polyhedral subdivision for meshes \ based on the cubic mesh representation discussed in that notebook. In \ particular, figures 7.21-7.24 were created using this code." }], "Text"], Cell[CellGroupData[{ Cell["Code to handle lower dimensional creases", "Subsubsection"], Cell[TextData[{ Cell[BoxData[ \(dimension\)]], " compute dimension of cell in the topological mesh ", Cell[BoxData[ \(T\)]] }], "Text"], Cell[BoxData[ \(dimension[cell_] := If[Length[cell] \[Equal] 1, 0, If[Length[cell] \[Equal] 2, 1, 2]]\)], "Input", InitializationCell->True], Cell[TextData[{ "Modify ", Cell[BoxData[ RowBox[{"quadSub", Cell[""]}]]], " to subdivide lower dimensional cells" }], "Text"], Cell[BoxData[ RowBox[{\(quadCreaseSub[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({idx, index, currIndex = Length[p], newT, newp}\), ",", "\[IndentingNewLine]", "\n", "\[IndentingNewLine]", \( (*\ define\ an\ order\ independent\ hash\ table\ idx, \ intialize\ it\ to\ zero, \[IndentingNewLine]\ lookup\ function\ index, \ increments\ global\ counter\ currIndex\ when\ new\ vertex\ is\ \ encountered\ *) \), "\[IndentingNewLine]", RowBox[{\(SetAttributes[idx, Orderless]\), ";", "\[IndentingNewLine]", \(idx[_, _] = 0\), ";", "\[IndentingNewLine]", \(index[i_, j_] := If[idx[i, j] == 0, idx[i, j] = \(++currIndex\), idx[i, j]]\), ";", "\n", "\n", "\[IndentingNewLine]", \( (*\ allocate\ table\ of\ size\ sufficient\ to\ hold\ new\ vertex\ \ locations\ *) \), "\[IndentingNewLine]", \(newp = Table[0, {2 Length[T] + 2 Length[p] + 10}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", RowBox[{"newT", "=", RowBox[{"Flatten", "[", RowBox[{ RowBox[{ "Table", "[", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ subdivide\ a\ quad\ into\ four\ quads\ using\ bi - linear\ interpolation\ *) \), "\[IndentingNewLine]", RowBox[{ RowBox[{"If", "[", RowBox[{\(dimension[ T\[LeftDoubleBracket] l\[RightDoubleBracket]] \[Equal] 2\), ",", "\[IndentingNewLine]", RowBox[{"With", "[", RowBox[{\({i00 = T\[LeftDoubleBracket]l, 1\[RightDoubleBracket], i20 = T\[LeftDoubleBracket]l, 2\[RightDoubleBracket], i22 = T\[LeftDoubleBracket]l, 3\[RightDoubleBracket], i02 = T\[LeftDoubleBracket]l, 4\[RightDoubleBracket]}\), ",", "\[IndentingNewLine]", RowBox[{"With", "[", RowBox[{\({i01 = index[i00, i02], i12 = index[i02, i22], i10 = index[i00, i20], i21 = index[i20, i22], i11 = \(++currIndex\)}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ update\ geometric\ info\ in\ newG\ *) \), "\[IndentingNewLine]", RowBox[{ RowBox[{\(newp\[LeftDoubleBracket]{i00, i20, i22, i02, i10, i21, i12, i01, i11}\[RightDoubleBracket]\), "=", RowBox[{\(1\/4\), RowBox[{ RowBox[{"(", GridBox[{ {"4", "0", "0", "0"}, {"0", "4", "0", "0"}, {"0", "0", "4", "0"}, {"0", "0", "0", "4"}, {"2", "2", "0", "0"}, {"0", "2", "2", "0"}, {"0", "0", "2", "2"}, {"2", "0", "0", "2"}, {"1", "1", "1", "1"} }], ")"}], ".", \(p\[LeftDoubleBracket]T\ \[LeftDoubleBracket]l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ create\ four\ subtriangles\ *) \), "\[IndentingNewLine]", \({{i00, i10, i11, i01}, \[IndentingNewLine]{i02, i01, i11, i12}, \[IndentingNewLine]{i20, i21, i11, i10}, \[IndentingNewLine]{i22, i12, i11, i21}}\)}]}], "]"}]}], "]"}], ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ split\ segment, \ copy\ vertex\ *) \), "\[IndentingNewLine]", RowBox[{"If", "[", RowBox[{\(dimension[ T\[LeftDoubleBracket]l\[RightDoubleBracket]]\ \[Equal] 1\), ",", "\[IndentingNewLine]", RowBox[{"With", "[", RowBox[{\({i0 = T\[LeftDoubleBracket]l, 1\[RightDoubleBracket], i1 = T\[LeftDoubleBracket]l, 2\[RightDoubleBracket], i01 = index[ T\[LeftDoubleBracket]l, 1\[RightDoubleBracket], T\[LeftDoubleBracket]l, 2\[RightDoubleBracket]]}\), ",", "\[IndentingNewLine]", RowBox[{ RowBox[{\(newp\[LeftDoubleBracket]{i0, i01, i1}\[RightDoubleBracket]\), "=", RowBox[{\(1\/2\), RowBox[{ RowBox[{"(", GridBox[{ {"2", "0"}, {"1", "1"}, {"0", "2"} }], ")"}], ".", \(p\[LeftDoubleBracket]T\ \[LeftDoubleBracket]l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}], ";", \({{i0, i01}, {i01, i1}}\)}]}], "]"}], ",", "\[IndentingNewLine]", \(newp\ \[LeftDoubleBracket]T\[LeftDoubleBracket]l, 1\[RightDoubleBracket]\ \[RightDoubleBracket] = p\[LeftDoubleBracket]T\[LeftDoubleBracket]l, 1\[RightDoubleBracket]\ \[RightDoubleBracket]; {T\[LeftDoubleBracket]l\[RightDoubleBracket]}\)}], "]"}]}], "]"}], ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ",", "1"}], "]"}]}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ return\ topology\ plus\ part\ of\ newG\ that\ was\ actually\ \ used\ *) \), "\[IndentingNewLine]", "\[IndentingNewLine]", \({newT, Take[newp, currIndex]}\)}]}], "]"}]}]], "Input", InitializationCell->True], Cell[TextData[{ "Modify ", Cell[BoxData[ \(quadAverage\)]], " to compute ", Cell[BoxData[ \(dim\)]], " and ", Cell[BoxData[ \(val\)]], " for each vertex, modify smoothing rule" }], "Text"], Cell[BoxData[ \(quadCreaseAverage[{T_, p_}] := Module[{newp = 0*p, \ val = Table[0, {Length[p]}], dim = Table[\[Infinity], {Length[ p]}]}, \[IndentingNewLine]\[IndentingNewLine] (*\ compute\ table\ of\ vertex\ valences\ and\ dimensions\ \ *) \[IndentingNewLine]Do[ With[{d = dimension[ T\[LeftDoubleBracket] l\[RightDoubleBracket]]}, \[IndentingNewLine]Do[ With[{idx = T\[LeftDoubleBracket]l, i\[RightDoubleBracket]}, \[IndentingNewLine]If[ d < dim\[LeftDoubleBracket] idx\[RightDoubleBracket], \[IndentingNewLine]dim\ \[LeftDoubleBracket]idx\[RightDoubleBracket] = d; val\[LeftDoubleBracket]idx\[RightDoubleBracket] = 1, \[IndentingNewLine]If[ d \[Equal] dim\[LeftDoubleBracket] idx\[RightDoubleBracket], \(++val\[LeftDoubleBracket] idx\[RightDoubleBracket]\)]]], \[IndentingNewLine]{i, Length[T\[LeftDoubleBracket] l\[RightDoubleBracket]]}]], \[IndentingNewLine]{l, Length[T]}]; \[IndentingNewLine]\[IndentingNewLine] (*\ apply\ smoothing\ mask\ to\ each\ cell\ and\ accumulate\ results\ *) \[IndentingNewLine]Do[ With[{cent = Apply[Plus, p\[LeftDoubleBracket]T\[LeftDoubleBracket]l\ \[RightDoubleBracket]\[RightDoubleBracket]]\/Length[T\[LeftDoubleBracket]l\ \[RightDoubleBracket]]}, \[IndentingNewLine]Do[ With[{idx = T\[LeftDoubleBracket]l, i\[RightDoubleBracket]}, \[IndentingNewLine]If[ dimension[ T\[LeftDoubleBracket]l\[RightDoubleBracket]] \[Equal] dim\[LeftDoubleBracket]idx\[RightDoubleBracket], newp\[LeftDoubleBracket]idx\[RightDoubleBracket] += cent\/val\[LeftDoubleBracket]idx\[RightDoubleBracket]]], \ \[IndentingNewLine]{i, Length[T\[LeftDoubleBracket] l\[RightDoubleBracket]]}]], \[IndentingNewLine]{l, Length[T]}]; \[IndentingNewLine]\[IndentingNewLine]{T, newp}]\)], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Example of a simple polyhedral surface with creases", "Subsubsection"], Cell[TextData[{ "To allow for creases, we add topological edges and vertices to the \ topology list ", Cell[BoxData[ \(T\)]], ". Below is the surface mesh of equation 7.6." }], "Text"], Cell[BoxData[ \(\(surface = {{{1}, {3}, {7}, {9}, {1, 4}, {4, 7}, {1, 2}, {2, 3}, {3, 6}, {6, 9}, {7, 8}, {8, 9}, \[IndentingNewLine]{1, 2, 5, 4}, {4, 5, 8, 7}, {2, 3, 6, 5}, {5, 6, 9, 8}}, \[IndentingNewLine]{{0, 0, 0}, {1, 0, 1}, {2, 0, 0}, {0, 1, 1}, {1, 1, 2}, {2, 1, 1}, {0, 2, 0}, {1, 2, 1}, {2, 2, 0}}};\)\)], "Input", InitializationCell->True], Cell["\<\ Examples of rectangluar surface mesh with boundary creases, example from \ first of section\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{displayMesh[ surface], \[IndentingNewLine]displayMesh[quadCreaseSub[surface]], displayMesh[ quadCreaseAverage[quadCreaseSub[surface]]]}]]\)], "Input", CellTags->"FIG bilinear subdivision plus averaging"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{Nest[ Composition[quadCreaseAverage, quadCreaseSub], surface, 0] // displayMesh, \[IndentingNewLine]Nest[ Composition[quadCreaseAverage, quadCreaseSub], surface, 1] // displayMesh, \[IndentingNewLine]Nest[ Composition[quadCreaseAverage, quadCreaseSub], surface, 2] // displayMesh, \[IndentingNewLine]Nest[ Composition[quadCreaseAverage, quadCreaseSub], surface, 3] // displayMesh}]]\)], "Input", CellTags->{ "FIG bilinear subdivision plus averaging", "Fig: Tensor product cubic B-spline"}], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["\<\ An example of cube with a single crease curve formed by six connected edges\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Nest[ Composition[quadCreaseAverage, quadCreaseSub], {{{1, 2}, {2, 4}, {4, 8}, {1, 3}, {3, 7}, {7, 8}, \[IndentingNewLine]{1, 2, 4, 3}, {5, 6, 8, 7}, {1, 3, 7, 5}, {2, 4, 8, 6}, {1, 5, 6, 2}, {3, 7, 8, 4}}, \[IndentingNewLine]{{0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {1, 1, 0}, {0, 0, 1}, {1, 0, 1}, {0, 1, 1}, {1, 1, 1}}}, 3] // displayMesh\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics3D \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Ring and axe examples", "Subsubsection"], Cell["Two more interesting examples", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{{\[IndentingNewLine]displayMeshColor[ Nest[Composition[quadCreaseAverage, quadCreaseSub], colorRing, 0], ViewPoint -> {\(-0.070\), \ 1.645, \ \(-2.956\)}], \[IndentingNewLine]displayMeshColor[ Nest[Composition[quadCreaseAverage, quadCreaseSub], colorRing, 1], ViewPoint -> {\(-0.070\), \ 1.645, \ \(-2.956\)}]}, \ {\[IndentingNewLine]displayMeshColor[ Nest[Composition[quadCreaseAverage, quadCreaseSub], colorRing, 2], ViewPoint -> {\(-0.070\), \ 1.645, \ \(-2.956\)}], \[IndentingNewLine]displayMeshColor[ Nest[Composition[quadCreaseAverage, quadCreaseSub], colorRing, 3], ViewPoint -> {\(-0.070\), \ 1.645, \ \(-2.956\)}]}}]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]{Nest[ Composition[quadCreaseAverage, quadCreaseSub], colorAxe, 0] // displayMeshColor, \[IndentingNewLine]Nest[ Composition[quadCreaseAverage, quadCreaseSub], colorAxe, 1] // displayMeshColor}, {\[IndentingNewLine]Nest[ Composition[quadCreaseAverage, quadCreaseSub], colorAxe, 2] // displayMeshColor, \[IndentingNewLine]Nest[ Composition[quadCreaseAverage, quadCreaseSub], colorAxe, 3] // displayMeshColor}}]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Code used in creating figure 7.8", "Subsubsection"], Cell["Non\[Hyphen]manifold butterfly curve with curve plotting function", \ "Text"], Cell[BoxData[ \(curvePlot[{T_, G_}, dotSize_, opts___] := Show[Graphics[\[IndentingNewLine]Join[{PointSize[dotSize]}, Flatten[Table[ If[Length[ T\[LeftDoubleBracket]i\[RightDoubleBracket]] \[Equal] 0, Point[ G\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket]\[RightDoubleBracket]], \ \[IndentingNewLine]{Point[ G\[LeftDoubleBracket]T\[LeftDoubleBracket]i, 1\[RightDoubleBracket]\[RightDoubleBracket]], Point[G\[LeftDoubleBracket] T\[LeftDoubleBracket]i, 2\[RightDoubleBracket]\[RightDoubleBracket]], Line[G\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket]\[RightDoubleBracket]]}], {i, Length[T]}]]]], AspectRatio \[Rule] Automatic, opts]\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(With[{butterfly = {{{1, 2}, {2, 3}, {3, 1}, {1, 4}, {4, 5}, {5, 1}}, {{0, 0}, {1, 1}, {1\/2, \(-1\)}, {\(-1\), 1}, {\(-1\)\/2, \(-1\)}}}}, \n Show[GraphicsArray[{\[IndentingNewLine]curvePlot[ Nest[Composition[quadCreaseAverage, quadCreaseSub], butterfly, 0], \[IndentingNewLine]0.02, PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]curvePlot[ Nest[Composition[quadCreaseAverage, quadCreaseSub], butterfly, 1], \[IndentingNewLine]0.02, PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]curvePlot[ Nest[Composition[quadCreaseAverage, quadCreaseSub], butterfly, 2], \[IndentingNewLine]0.02, PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]curvePlot[ Nest[Composition[quadCreaseAverage, quadCreaseSub], butterfly, 3], \[IndentingNewLine]0.02, PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}}]}]]]\)], "Input", CellTags->"FIG butterfly"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Smooth subdivision for triangular meshes", "Section"], Cell[CellGroupData[{ Cell["Linear subdivision plus triangle averaging", "Subsection", CellTags->"SUBSEC smooth triangular"], Cell[CellGroupData[{ Cell["Triangle averaging", "Subsubsection"], Cell[TextData[{ "Initial version of ", Cell[BoxData[ \(triAverage\)]] }], "Text"], Cell[BoxData[ RowBox[{\(triAverage[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({newp = 0*p, \ val = Table[0, {Length[p]}]}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ compute\ table\ of\ vertex\ valences\ *) \), "\[IndentingNewLine]", RowBox[{\(Do[\(++val\[LeftDoubleBracket] T\[LeftDoubleBracket]l, i\[RightDoubleBracket]\[RightDoubleBracket]\), \ \[IndentingNewLine]{l, Length[T]}, {i, Length[T\[LeftDoubleBracket]l\[RightDoubleBracket]]}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ apply\ smoothing\ mask\ to\ each\ cell\ *) \), "\[IndentingNewLine]", RowBox[{"Do", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{\(newp\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\), "+=", " ", RowBox[{\(1\/\(8 val\[LeftDoubleBracket]T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\)\), RowBox[{ RowBox[{"(", GridBox[{ {"2", "3", "3"}, {"3", "2", "3"}, {"3", "3", "2"} }], ")"}], ".", \(p\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}]}], ",", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \({T, newp}\)}]}], "]"}]}]], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{{displayMesh[triSub[octa], PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]displayMesh[ triAverage[triSub[octa]], PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}]}, \[IndentingNewLine]{displayMesh[ triSub[triAverage[triSub[octa]]], PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]displayMesh[ triAverage[triSub[triAverage[triSub[octa]]]], PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}]}}]]\)], "Input", CellTags->"Fig: 3 rounds of linear subdivision plus triangle smoothing"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{displayMesh[ Nest[Composition[triAverage, triSub], stellatedOcta, 0], \[IndentingNewLine]PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]displayMesh[ Nest[Composition[triAverage, triSub], stellatedOcta, 3], \[IndentingNewLine]PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}], \[IndentingNewLine]displayMesh[ Nest[Composition[loopAverage, triSub], stellatedOcta, 3], \[IndentingNewLine]PlotRange \[Rule] {{\(-1\), 1}, {\(-1\), 1}, {\(-1\), 1}}]}]]\)], "Input", CellTags->"FIG stellated octahedron example"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Comparison to other triangle schemes", "Subsection"], Cell[CellGroupData[{ Cell["Figures for triangle masks", "Subsubsection"], Cell[BoxData[ \(nTris[ n_] := \[IndentingNewLine]{Join[ Table[{1, i, i + 1}, {i, 2, n}], {{1, n + 1, 2}}], \[IndentingNewLine]Join[{{0, 0}}, Table[{Cos[\(2 \[Pi]\ i\)\/n], Sin[\(2\ \[Pi]\ i\)\/n]} // N, {i, 0, n - 1}]]}\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(\(\(Show[ GraphicsArray[{\[IndentingNewLine]displayTaggedMesh[{{{1, 2, 3}, {1, 2, 4}}, \(1\/2\) {{\(-1\), 0}, {1, 0}, {0, 2}, {0, \(-2\)}}}, {3\/8, 3\/8, 1\/8, 1\/8}, {{1, 0}, {\(-1\), 0}, {0, \(-1\)}, {0, 1}}, {{\(-3\)\/2, 3\/2}, {\(-3\)\/2, 3\/2}}], \[IndentingNewLine]displayTaggedMesh[ nTris[5], {5\/8, 3\/\(8 n\), 3\/\(8 n\), 3\/\(8 n\), 3\/\(8 n\), 3\/\(8 n\)}, \[IndentingNewLine]{{2, 0}, {\(-1\), 0}, {0, \(-1\)}, {1, \(-1\)}, {1, 1}, {0, 1}}, {{\(-1.2\), 1.2}, {\(-1.2\), 1.2}}], \[IndentingNewLine]displayTaggedMesh[ nTris[5], {1 - w[n], w[n]\/n, w[n]\/n, w[n]\/n, w[n]\/n, w[n]\/n}, \[IndentingNewLine]{{1, 0}, {\(-1\), 0}, {0, \(-1\)}, {1, \(-1\)}, {1, 1}, {0, 1}}, {{\(-1.2\), 1.2}, {\(-1.2\), 1.2}}]}]]\)\(\[IndentingNewLine]\) \)\)], "Input", CellTags->"FIG tri vertex rules"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Implementation of Loop's scheme", "Subsubsection"], Cell[BoxData[ RowBox[{\(loopAverage[{T_, p_}]\), ":=", RowBox[{"Module", "[", RowBox[{\({newp = 0*p, \ val = Table[0, {Length[p]}]}\), ",", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ compute\ table\ of\ vertex\ valences\ *) \), "\[IndentingNewLine]", RowBox[{\(Do[\(++val\[LeftDoubleBracket] T\[LeftDoubleBracket]l, i\[RightDoubleBracket]\[RightDoubleBracket]\), \ \[IndentingNewLine]{l, Length[T]}, {i, Length[T\[LeftDoubleBracket]l\[RightDoubleBracket]]}]\), ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \( (*\ apply\ smoothing\ mask\ to\ each\ cell\ *) \), "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{"With", "[", RowBox[{\({a = 5\/8 - \((3\/8 + \(1\/4\) Cos[\(2.0 \[Pi]\)\/val\ \[LeftDoubleBracket]T\[LeftDoubleBracket]l\[RightDoubleBracket]\ \[RightDoubleBracket]])\)\^2}\), ",", "\[IndentingNewLine]", RowBox[{\(newp\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\), "+=", RowBox[{\(1\/\(\(\ \)\(val\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\)\ \)\), RowBox[{ RowBox[{"(", GridBox[{ {\(1 - 2 a\[LeftDoubleBracket]1\ \[RightDoubleBracket]\), \(a\[LeftDoubleBracket]1\[RightDoubleBracket]\), \(a\ \[LeftDoubleBracket]1\[RightDoubleBracket]\)}, {\(a\[LeftDoubleBracket]2\[RightDoubleBracket]\ \), \(1 - 2 a\[LeftDoubleBracket]2\ \[RightDoubleBracket]\), \(a\[LeftDoubleBracket]2\[RightDoubleBracket]\)}, {\(a\[LeftDoubleBracket]3\[RightDoubleBracket]\ \), \(a\[LeftDoubleBracket]3\[RightDoubleBracket]\), \(1 - 2 a\[LeftDoubleBracket]3\ \[RightDoubleBracket]\)} }], ")"}], ".", \(p\[LeftDoubleBracket] T\[LeftDoubleBracket] l\[RightDoubleBracket]\[RightDoubleBracket]\)}]}\ ]}]}], "]"}], ",", "\[IndentingNewLine]", \({l, Length[T]}\)}], "]"}], ";", "\[IndentingNewLine]", "\[IndentingNewLine]", \({T, newp}\)}]}], "]"}]}]], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{Nest[Composition[triAverage, triSub], octa, 3] // displayMesh, Nest[Composition[loopAverage, triSub], octa, 3] // displayMesh}]]\)], "Input", CellTags->"FIG averaging versus Loop"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Other types of polyhedral schemes", "Section"], Cell[CellGroupData[{ Cell["Face\[Hyphen]splitting schemes", "Subsection"], Cell[CellGroupData[{ Cell["Face\[Hyphen]splitting topological subdivision figure", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{Show[ Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{{1, \(-3\)}, {1, 3}}], \[IndentingNewLine]Line[{{\(-1\), \(-3\)}, \ {\(-1\), 3}}], \[IndentingNewLine]Line[{{\(-3\), 1}, {3, 1}}], \[IndentingNewLine]Line[{{\(-3\), \(-1\)}, {3, \ \(-1\)}}], \[IndentingNewLine]Point[{1, 1}], Point[{\(-1\), 1}], Point[{\(-1\), \(-1\)}], Point[{1, \(-1\)}], \[IndentingNewLine]Dashing[{0.05}], \ \[IndentingNewLine]Line[{{2, 2}, {\(-2\), \(-2\)}}], Line[{{\(-2\), 2}, {2, \(-2\)}}], \[IndentingNewLine]Line[{{3, \ \(-1\)}, {\(-1\), 3}}], Line[{{1, \(-3\)}, {\(-3\), 1}}], \[IndentingNewLine]Line[{{\(-1\), \(-3\)}, {3, 1}}], Line[{{\(-3\), \(-1\)}, {1, 3}}], \[IndentingNewLine]GrayLevel[ 0.75], \[IndentingNewLine]Point[{0, 0}], Point[{2, 0}], Point[{0, 2}], Point[{\(-2\), 0}], Point[{0, \(-2\)}]}], AspectRatio \[Rule] Automatic], g2 = With[{p0 = {0, 0}, p1 = {2, 0}, p2 = {1, \@3}}, \[IndentingNewLine]Show[ Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{p0, p1}], \[IndentingNewLine]Line[{p0, p2}], \[IndentingNewLine]Line[{p1, p2}], \[IndentingNewLine]Line[{\(p0 + p1\)\/2, \(p1 + \ p2\)\/2}], \[IndentingNewLine]Line[{\(p0 + p1\)\/2, \(p0 + p2\)\/2}], \ \[IndentingNewLine]Line[{\(p0 + p2\)\/2, \(p1 + p2\)\/2}], \ \[IndentingNewLine]Point[p0], Point[p1], Point[p2], \[IndentingNewLine]Dashing[{0.05}], \ \[IndentingNewLine]Line[{p0, \(p1 + p2\)\/2}], \[IndentingNewLine]Line[{p1, \ \(p0 + p2\)\/2}], \[IndentingNewLine]Line[{p2, \(p1 + p0\)\/2}], \ \[IndentingNewLine]Line[{\(3 p0 + p1\)\/4, \(p0 + p2\)\/2}], Line[{\(3 p0 + p2\)\/4, \(p0 + p1\)\/2}], \ \[IndentingNewLine]Line[{\(3 p1 + p0\)\/4, \(p1 + p2\)\/2}], Line[{\(3 p1 + p2\)\/4, \(p0 + p1\)\/2}], \ \[IndentingNewLine]Line[{\(3 p2 + p1\)\/4, \(p0 + p2\)\/2}], Line[{\(3 p2 + p0\)\/4, \(p1 + p2\)\/2}], \ \[IndentingNewLine]GrayLevel[ 0.75], \[IndentingNewLine]Point[\(p0 + p1 + p2\)\/3], \ \[IndentingNewLine]Point[\(4 p0 + p1 + p2\)\/6], Point[\(p0 + 4 p1 + p2\)\/6], Point[\(p0 + p1 + 4 p2\)\/6]}], AspectRatio \[Rule] Automatic]]}]]\)], "Input", CellTags->"FIG face-splitting subdivisions"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Figures for interpolatory subdivision masks", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]displayTaggedMesh[{{{1, 2, 3, 4}, {1, 2, 5, 6}, {2, 3, 7, 8}, {3, 4, 9, 10}, {1, 4, 11, 12}}, \[IndentingNewLine]0.45 {{\(-1\), \(-1\)}, {1, \ \(-1\)}, {1, 1}, {\(-1\), 1}, {1, \(-3\)}, {\(-1\), \(-3\)}, {3, 1}, {3, \(-1\)}, {\(-1\), 3}, {1, 3}, {\(-3\), 1}, {\(-3\), \(-1\)}}}, {5\/16, 5\/16, 5\/16, 5\/16, \(-\(1\/32\)\), \(-\(1\/32\)\), \(-\(1\/32\)\), \ \(-\(1\/32\)\), \(-\(1\/32\)\), \(-\(1\/32\)\), \(-\(1\/32\)\), \ \(-\(1\/32\)\)}, {{1, 1}, {\(-1\), 1}, {\(-1\), \(-1\)}, {1, \(-1\)}, {\(-1\), 0}, {1, 0}, {0, \(-1\)}, {0, 1}, {1, 0}, {\(-1\), 0}, {0, \(-1\)}, {0, 1}}, {{\(-1.5\), 1.5}, {\(-1.5\), 1.5}}], \[IndentingNewLine]displayTaggedMesh[{{{1, 2, 3}, {1, 2, 4}, {2, 3, 5}, {1, 3, 6}}, \(1\/2\) {{\(-1\), \(-5\)\/6}, {1, \(-5\)\/6}, {0, 7\/6}, {0, \(-3\) + 1\/6}, {2, 7\/6}, {\(-2\), 7\/6}}}, {4\/9, 4\/9, 4\/9, \(-\(1\/9\)\), \(-\(1\/9\)\), \(-\(1\/9\)\)}, \ \[IndentingNewLine]{{1, 1}, {\(-1\), 1}, {0, \(-1\)}, {\(-1.5\), \(-1\)}, {\(-1\), 0}, {1, 0}}, {{\(-1.3\), 1.3}, {\(-1.5\), 1.0}}]}]]\)], "Input", CellTags->"FIG interpolatory face-split rules"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Code to test smoothness of interpolatory face splitting quad scheme\ \>", "Subsubsection", CellTags->"SUBSEC face splitting quad analysis"], Cell[TextData[{ "Transformations for quad case, represent as subset of integer grids via \ two transfromations ", Cell[BoxData[ \({x \[Rule] x\ y, y \[Rule] \(x\^\(-1\)\) y}\)]], " and ", Cell[BoxData[ \({x \[Rule] x\ y\^\(-1\), y \[Rule] x\ y}\)]], ". The composition of the two transfromation yields standard dilation \ (i.e., ", Cell[BoxData[ \({x \[Rule] x\^2, y \[Rule] y\^2}\)]], ")." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(\({x, y} /. {x \[Rule] x\ y, y \[Rule] \(x\^\(-1\)\) y}\) /. {x \[Rule] x\ y\^\(-1\), y \[Rule] x\ y}\)], "Input"], Cell[BoxData[ \({x\^2, y\^2}\)], "Output"] }, Open ]], Cell["Define interpolatory mask with cubic precision", "Text"], Cell[BoxData[ \(\(s = 1 + \(5\/16\) x + \(5\/16\) y + \(5\/16\) x\^\(-1\) + \(5\/16\) y\^\(-1\) - \[IndentingNewLine]\(1\/32\) \(x\^2\) y - \(1\/32\) x\ y\^2 - \(1\/32\) \(x\^\(-2\)\) y - \(1\/32\) \(x\^\(-1\)\) y\^2 - \[IndentingNewLine]\(1\/32\) \(x\^2\) y\^\(-1\) - \(1\/32\) x\ y\^\(-2\) - \(1\/32\) \(x\^\(-2\)\) y\^\(-1\) - \(1\/32\) \(x\^\(-1\)\) y\^\(-2\);\)\)], "Input"], Cell["Define equivalent mask for two rounds of subdivison", "Text"], Cell[BoxData[ \(\(ss = \((s /. {x \[Rule] x\ y, y \[Rule] \(x\^\(-1\)\) y})\)*s // Expand;\)\)], "Input"], Cell["\<\ Use functions from chapter 2 to confirm cubic precision on expanded mask\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(checkRoots[ss, 3]\)], "Input"], Cell[BoxData[ \(True\)], "Output"] }, Open ]], Cell["\<\ Compute matrix mask for difference of first divided differences for the \ scheme\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(t = computeMatrixMask[\(x\^5\) \(y\^5\) ss, {10, 10}, 1]\)], "Input"], Cell[BoxData[ \({{671\/47616 + \(671\ x\^2\)\/23808 + \(889\ x\^3\)\/72704 + \(13393\ x\ \^4\)\/416640 + \(551\ x\^5\)\/18176 + \(7859\ x\^6\)\/277760 + \(1031\ \ x\^7\)\/72704 + \(7859\ x\^8\)\/555520 + \(355\ x\ y\)\/22528 + \(1163\ x\^3\ \ y\)\/45056 + \(25\ x\^5\ y\)\/352 + \(211\ x\^7\ y\)\/5632 - \(2271\ \ y\^2\)\/138880 + \(4655\ x\ y\^2\)\/72704 + \(1315\ x\^3\ y\^2\)\/18176 + \ \(8441\ x\^4\ y\^2\)\/208320 + \(9\ x\^7\ y\^2\)\/512 - \(445\ x\^8\ \ y\^2\)\/27776 + y\^3\/256 - \(7\ x\^2\ y\^3\)\/512 + \(1753\ x\^3\ y\^3\)\/22528 - \ \(7\ x\^6\ y\^3\)\/512 - \(255\ x\^7\ y\^3\)\/5632 + \(x\^8\ y\^3\)\/256 - \ \(66813\ x\ y\^4\)\/581632 - \(27933\ x\^2\ y\^4\)\/277760 + \(11939\ x\^4\ y\ \^4\)\/83328 + \(77\ x\^5\ y\^4\)\/1136 - \(5513\ x\^6\ y\^4\)\/55552 - \ \(2777\ x\^7\ y\^4\)\/36352 - \(161\ x\ y\^5\)\/5632 - \(25\ x\^2\ \ y\^5\)\/256 + \(4383\ x\^3\ y\^5\)\/45056 + \(47\ x\^4\ y\^5\)\/64 + \(87\ \ x\^5\ y\^5\)\/704 - \(25\ x\^6\ y\^5\)\/256 - \(1287\ y\^6\)\/277760 + \ \(25635\ x\^3\ y\^6\)\/145408 + \(56237\ x\^4\ y\^6\)\/138880 + \(6329\ x\^5\ \ y\^6\)\/36352 - \(739\ x\^8\ y\^6\)\/222208 + y\^7\/256 - \(19\ x\ y\^7\)\/512 - \(7\ x\^2\ y\^7\)\/512 - \(7\ \ x\^6\ y\^7\)\/512 - \(255\ x\^7\ y\^7\)\/5632 + \(x\^8\ y\^7\)\/256 + \(7027\ \ y\^8\)\/1666560 + \(6039\ x\ y\^8\)\/581632 + \(943\ x\^2\ y\^8\)\/208320 + \ \(715\ x\^7\ y\^8\)\/72704 + \(773\ x\ y\^9\)\/22528 + \(729\ x\^3\ \ y\^9\)\/11264 + \(25\ x\^5\ y\^9\)\/352 + \(211\ x\^7\ y\^9\)\/5632 + \(2231\ \ y\^10\)\/833280 + \(2679\ x\ y\^10\)\/290816 + \(2231\ x\^2\ y\^10\)\/416640 \ + \(2963\ x\^3\ y\^10\)\/145408 + \(573\ x\^4\ y\^10\)\/138880 + \(329\ x\^5\ \ y\^10\)\/36352 + \(1173\ x\^6\ y\^10\)\/138880 + \(129\ x\^7\ y\^10\)\/36352 \ + \(5777\ x\^8\ y\^10\)\/1111040, \(x\^2\ y\)\/512 - \(x\^8\ y\)\/512 - \ \(x\^2\ y\^7\)\/512 + \(x\^8\ y\^7\)\/512, \(-\(671\/47616\)\) - \(747\ \ x\^3\)\/72704 + \(10373\ x\^4\)\/1666560 + \(1457\ x\^7\)\/36352 + \(10649\ x\ \^8\)\/1666560 - \(1031\ x\^11\)\/72704 - \(7859\ x\^12\)\/555520 - \(355\ x\ \ y\)\/22528 + \(81\ x\^3\ y\)\/45056 - \(7\ x\^4\ y\)\/512 - \(9\ x\^6\ \ y\)\/256 + \(5133\ x\^7\ y\)\/45056 - \(7\ x\^8\ y\)\/512 - \(211\ x\^11\ y\)\ \/5632 - \(9859\ y\^2\)\/833280 - \(4513\ x\ y\^2\)\/72704 - \(10169\ x\^2\ y\ \^2\)\/277760 + \(6575\ x\^5\ y\^2\)\/72704 + \(731\ x\^6\ y\^2\)\/6510 - \ \(1997\ x\^10\ y\^2\)\/55552 - \(1599\ x\^11\ y\^2\)\/36352 - \(487\ x\^12\ y\ \^2\)\/39680 - y\^3\/512 - \(399\ x\ y\^3\)\/11264 - \(3\ x\^2\ y\^3\)\/256 - \ \(447\ x\^5\ y\^3\)\/11264 + \(39\ x\^6\ y\^3\)\/256 - \(23\ x\^9\ \ y\^3\)\/1408 - \(3\ x\^10\ y\^3\)\/256 - \(189\ x\^11\ y\^3\)\/5632 - \(x\^12\ \ y\^3\)\/512 - \(5317\ y\^4\)\/555520 - \(15619\ x\ y\^4\)\/581632 - \(4185\ \ x\^3\ y\^4\)\/290816 + \(9197\ x\^4\ y\^4\)\/555520 + \(32621\ x\^5\ \ y\^4\)\/581632 + \(1511\ x\^8\ y\^4\)\/79360 - \(563\ x\^9\ y\^4\)\/36352 - \ \(1089\ x\^11\ y\^4\)\/72704 - \(5777\ x\^12\ y\^4\)\/555520 - \(773\ x\ y\^5\ \)\/22528 - \(7\ x\^4\ y\^5\)\/512 + \(1335\ x\^5\ y\^5\)\/22528 - \(9\ x\^6\ \ y\^5\)\/256 + \(845\ x\^7\ y\^5\)\/11264 - \(7\ x\^8\ y\^5\)\/512 - \(211\ \ x\^11\ y\^5\)\/5632 - \(2231\ y\^6\)\/833280 - \(2679\ x\ y\^6\)\/290816 + \ \(8245\ x\^5\ y\^6\)\/290816 - \(5567\ x\^6\ y\^6\)\/416640 + \(5\ x\^7\ y\^6\ \)\/145408 + \(581\ x\^8\ y\^6\)\/158720 + \(x\^10\ y\^6\)\/512 - \(129\ \ x\^11\ y\^6\)\/36352 - \(5777\ x\^12\ y\^6\)\/1111040}, {22895\/1714432 - \ \(1931\ x\)\/47552 + \(22895\ x\^2\)\/857216 - \(4361\ x\^3\)\/190208 - \ \(38399\ x\^4\)\/1714432 - \(255\ x\^5\)\/190208 - \(70101\ x\^6\)\/6857728 - \ \(1253\ x\^7\)\/760832 - \(23437\ y\)\/1747200 - \(86923\ x\^2\ y\)\/3494400 \ + \(417\ x\^3\ y\)\/837376 + \(3779\ x\^4\ y\)\/1747200 + \(24565\ x\^5\ \ y\)\/1674752 + \(323\ x\^6\ y\)\/20800 + \(6959\ x\^7\ y\)\/837376 - \(37557\ \ y\^2\)\/3428864 - \(22389\ x\^3\ y\^2\)\/760832 + \(92521\ x\^6\ \ y\^2\)\/3428864 + \(1091\ y\^3\)\/46592 - \(21647\ x\ y\^3\)\/209344 - \ \(30665\ x\^3\ y\^3\)\/837376 - \(3011\ x\^4\ y\^3\)\/349440 - \(23651\ x\^7\ \ y\^3\)\/1674752 - \(4301\ x\ y\^4\)\/190208 - \(50951\ x\^2\ y\^4\)\/857216 - \ \(52083\ x\^4\ y\^4\)\/1714432 + \(6051\ x\^7\ y\^4\)\/760832 + \(197749\ x\ \ y\^5\)\/1674752 - \(459\ x\^2\ y\^5\)\/46592 + \(78759\ x\^5\ y\^5\)\/1674752 \ - \(17203\ x\^6\ y\^5\)\/698880 - \(66149\ y\^6\)\/3428864 + \(43195\ x\^3\ y\ \^6\)\/380416 + \(28133\ x\^5\ y\^6\)\/1521664 - \(1103\ y\^7\)\/698880 - \ \(26041\ x\^3\ y\^7\)\/1674752 + \(2189\ x\^4\ y\^7\)\/46592 - \(355\ x\^5\ y\ \^7\)\/13084 - \(443\ x\^6\ y\^7\)\/11648 - \(7119\ x\^7\ y\^7\)\/1674752 + \ \(32583\ x\^2\ y\^8\)\/428608 - \(63\ x\^5\ y\^8\)\/1024 + \(38945\ x\^6\ \ y\^8\)\/6857728 + \(15569\ x\ y\^9\)\/1674752 - \(3541\ x\^2\ y\^9\)\/349440 \ + \(x\^5\ y\^9\)\/256 + \(9\ x\^6\ y\^9\)\/512 + \(3891\ y\^10\)\/428608 + \ \(7567\ x\ y\^10\)\/190208 - \(3625\ x\^2\ y\^10\)\/857216 - \(4949\ x\^3\ \ y\^10\)\/760832 - \(819\ x\^4\ y\^10\)\/428608 + \(8085\ x\^5\ \ y\^10\)\/1521664 + \(3421\ x\^6\ y\^10\)\/3428864 + \(573\ x\^7\ \ y\^10\)\/380416 - \(89\ y\^11\)\/145600 - \(445\ x\ y\^11\)\/837376 + \(1447\ \ x\^2\ y\^11\)\/249600 - \(5051\ x\^3\ y\^11\)\/1674752 + \(49477\ x\^4\ y\^11\ \)\/3494400 + \(497\ x\^5\ y\^11\)\/837376 + \(10663\ x\^6\ y\^11\)\/1747200 \ + \(471\ x\^7\ y\^11\)\/209344, \(21431\ x\)\/380416 + \(447039\ \ x\^4\)\/6857728 + \(43869\ x\ y\)\/418688 + \(47221\ x\ y\^2\)\/760832 + \ \(404383\ x\^4\ y\^2\)\/6857728 + \(1288721\ x\^4\ y\^4\)\/3428864 + \(55469\ \ x\^5\ y\^4\)\/190208 + \(x\^4\ y\^5\)\/2 + \(165475\ x\^5\ y\^5\)\/418688 + \ \(68457\ x\ y\^8\)\/760832, \(-\(22895\/1714432\)\) - \(5983\ x\)\/380416 - \ \(32097\ x\^4\)\/6857728 + \(18143\ x\^7\)\/760832 - x\^9\/512 + \(70101\ x\^10\)\/6857728 + \(1253\ x\^11\)\/760832 + \ \(23437\ y\)\/1747200 - \(43869\ x\ y\)\/418688 + \(42025\ x\^3\ y\)\/418688 \ - \(18913\ x\^4\ y\)\/349440 + \(30273\ x\^7\ y\)\/837376 + \(5731\ x\^8\ y\)\ \/174720 - \(323\ x\^10\ y\)\/20800 - \(6959\ x\^11\ y\)\/837376 - \(54023\ y\ \^2\)\/3428864 - \(26805\ x\ y\^2\)\/760832 - \(22127\ x\^2\ y\^2\)\/857216 - \ \(8755\ x\^5\ y\^2\)\/95104 + \(64619\ x\^7\ y\^2\)\/760832 + \(76397\ x\^8\ \ y\^2\)\/857216 - \(29117\ x\^10\ y\^2\)\/3428864 + \(1253\ x\^11\ \ y\^2\)\/380416 + \(4687\ y\^3\)\/873600 - \(4421\ x\ y\^3\)\/837376 + \(17\ x\ \^2\ y\^3\)\/1456 - \(43433\ x\^5\ y\^3\)\/837376 + \(22643\ x\^6\ \ y\^3\)\/349440 + \(1447\ x\^9\ y\^3\)\/209344 - \(2259\ x\^10\ y\^3\)\/83200 \ - \(233\ x\^11\ y\^3\)\/52336 - \(68953\ y\^4\)\/3428864 + \(10893\ x\ y\^4\)\ \/760832 + \(11989\ x\^3\ y\^4\)\/760832 + \(99417\ x\^4\ y\^4\)\/3428864 - \ \(943405\ x\^6\ y\^4\)\/6857728 + \(293431\ x\^8\ y\^4\)\/3428864 + \(4883\ x\ \^9\ y\^4\)\/190208 - \(79417\ x\^10\ y\^4\)\/6857728 - \(403\ x\^11\ \ y\^4\)\/380416 + \(89\ y\^5\)\/72800 - \(4265\ x\ y\^5\)\/418688 + \(2813\ \ x\^3\ y\^5\)\/52336 - \(17\ x\^4\ y\^5\)\/1365 - \(24313\ x\^10\ \ y\^5\)\/873600 - \(471\ x\^11\ y\^5\)\/104672 - \(3891\ y\^6\)\/428608 + \ \(38189\ x\ y\^6\)\/760832 + \(70059\ x\^2\ y\^6\)\/3428864 - \(147\ x\^5\ \ y\^6\)\/2048 + \(22427\ x\^6\ y\^6\)\/1714432 - \(529\ x\^9\ y\^6\)\/1521664 \ - \(3421\ x\^10\ y\^6\)\/3428864 - \(573\ x\^11\ y\^6\)\/380416 + \(89\ \ y\^7\)\/145600 + \(445\ x\ y\^7\)\/837376 - \(2453\ x\^2\ y\^7\)\/349440 - \ \(4187\ x\^5\ y\^7\)\/418688 + \(3551\ x\^6\ y\^7\)\/174720 + \(x\^9\ \ y\^7\)\/256 - \(10663\ x\^10\ y\^7\)\/1747200 - \(471\ x\^11\ \ y\^7\)\/209344}, {\(-\(7343\/867712\)\) - \(39159\ x\^2\)\/6941696 - x\^3\/512 - \(9787\ x\^4\)\/3470848 - \(47\ x\^6\)\/108464 - \ \(163249\ y\)\/7522304 + \(x\ y\)\/20480 - \(155903\ x\^2\ y\)\/3761152 - \ \(21529\ x\^4\ y\)\/1880576 + \(x\^5\ y\)\/20480 + \(x\^6\ y\)\/1024 - \ \(91887\ x\^2\ y\^2\)\/3470848 - \(3\ x\^3\ y\^2\)\/256 + \(9\ y\^3\)\/512 + \ \(341\ x\^3\ y\^3\)\/5120 - \(173763\ x\^4\ y\^3\)\/3761152 + \(514139\ \ y\^4\)\/13883392 - \(7\ x\ y\^4\)\/512 + \(55765\ x\^4\ y\^4\)\/6941696 - \(7\ \ x\^5\ y\^4\)\/512 - \(12025\ x\^6\ y\^4\)\/13883392 + \(185451\ \ y\^5\)\/7522304 + \(821\ x\ y\^5\)\/20480 + \(222181\ x\^2\ y\^5\)\/3761152 - \ \(329\ x\^3\ y\^5\)\/1280 + \(821\ x\^5\ y\^5\)\/20480 - \(21021\ x\^6\ \ y\^5\)\/3761152 - \(387627\ y\^6\)\/6941696 - \(9\ x\ y\^6\)\/256 + \(30817\ \ x\^2\ y\^6\)\/433856 + \(39\ x\^3\ y\^6\)\/256 - \(9\ x\^5\ y\^6\)\/256 - \ \(101329\ x\^6\ y\^6\)\/6941696 + \(6205\ y\^7\)\/3761152 + \(123\ x\^3\ y\^7\ \)\/1280 + \(381711\ x\^4\ y\^7\)\/3761152 - \(7\ x\ y\^8\)\/512 + \(1717\ \ x\^4\ y\^8\)\/108464 - \(7\ x\^5\ y\^8\)\/512 + \(183\ x\ y\^9\)\/5120 - \ \(8487\ x\^2\ y\^9\)\/940288 + \(183\ x\^5\ y\^9\)\/5120 + \(95809\ x\^6\ \ y\^9\)\/1880576 + \(161675\ y\^10\)\/6941696 - \(3\ x\^3\ y\^10\)\/256 + \ \(20693\ x\^6\ y\^10\)\/6941696 - \(6163\ y\^11\)\/940288 - \(137\ x\ y\^11\)\ \/10240 - \(45549\ x\^2\ y\^11\)\/1880576 - \(157\ x\^3\ y\^11\)\/5120 - \ \(111829\ x\^4\ y\^11\)\/1880576 - \(137\ x\^5\ y\^11\)\/10240 - \(57751\ \ x\^6\ y\^11\)\/1880576 - \(161675\ y\^12\)\/13883392 - \(161675\ x\^2\ \ y\^12\)\/6941696 - \(x\^3\ y\^12\)\/512 - \(37615\ x\^4\ y\^12\)\/6941696 - \ \(37615\ x\^6\ y\^12\)\/13883392, \(x\ y\^2\)\/512 - \(x\^7\ y\^2\)\/512 - \ \(x\ y\^8\)\/512 + \(x\^7\ y\^8\)\/512, 7343\/867712 - \(78329\ x\^2\)\/6941696 + x\^3\/256 + \(3019\ x\^6\)\/6941696 + x\^7\/256 + x\^8\/512 + \(47\ x\^10\)\/108464 + \(163249\ y\)\/7522304 - \(x\ y\ \)\/20480 - \(39\ x\^3\ y\)\/10240 - \(506475\ x\^4\ y\)\/7522304 - \(81\ \ x\^5\ y\)\/10240 - \(39\ x\^7\ y\)\/10240 + \(28875\ x\^8\ y\)\/1880576 - \(x\ \^9\ y\)\/20480 - \(x\^10\ y\)\/1024 + \(7343\ y\^2\)\/433856 - \(7\ x\^3\ \ y\^2\)\/512 - \(34835\ x\^4\ y\^2\)\/433856 - \(25\ x\^5\ y\^2\)\/256 - \(7\ \ x\^7\ y\^2\)\/512 + \(47\ x\^10\ y\^2\)\/54232 + \(104481\ y\^3\)\/3761152 - \ \(41\ x\ y\^3\)\/10240 + \(46563\ x\^4\ y\^3\)\/470144 + \(1401\ x\^5\ y\^3\)\ \/5120 + \(105951\ x\^6\ y\^3\)\/940288 + \(157035\ x\^8\ y\^3\)\/3761152 - \ \(41\ x\^9\ y\^3\)\/10240 - \(215907\ y\^4\)\/13883392 + \(84227\ x\^2\ \ y\^4\)\/867712 + \(2242699\ x\^4\ y\^4\)\/13883392 + \(47\ x\^5\ y\^4\)\/64 + \ \(5326855\ x\^6\ y\^4\)\/13883392 - \(24159\ x\^10\ y\^4\)\/13883392 + \ \(28325\ y\^5\)\/1880576 - \(33\ x\ y\^5\)\/2560 + \(373\ x\^3\ y\^5\)\/2560 \ + \(351717\ x\^4\ y\^5\)\/1880576 + \(373\ x\^7\ y\^5\)\/2560 + \(1961\ x\^8\ \ y\^5\)\/29384 - \(33\ x\^9\ y\^5\)\/2560 + \(11683\ x\^10\ y\^5\)\/940288 + \ \(148117\ x\^2\ y\^6\)\/3470848 - \(7\ x\^3\ y\^6\)\/512 - \(380641\ x\^4\ \ y\^6\)\/3470848 - \(25\ x\^5\ y\^6\)\/256 - \(7\ x\^7\ y\^6\)\/512 + \(7135\ \ x\^8\ y\^6\)\/3470848 + \(8461\ x\^10\ y\^6\)\/3470848 + \(6163\ \ y\^7\)\/940288 + \(137\ x\ y\^7\)\/10240 + \(12285\ x\^2\ y\^7\)\/940288 - \ \(217\ x\^5\ y\^7\)\/5120 - \(153415\ x\^6\ y\^7\)\/1880576 + \(137\ x\^9\ \ y\^7\)\/10240 + \(57751\ x\^10\ y\^7\)\/1880576 + \(161675\ y\^8\)\/13883392 \ + \(x\^3\ y\^8\)\/256 - \(409795\ x\^4\ y\^8\)\/13883392 + \(210505\ x\^6\ \ y\^8\)\/13883392 + \(x\^7\ y\^8\)\/256 + \(37615\ x\^10\ \ y\^8\)\/13883392}}\)], "Output"] }, Open ]], Cell[TextData[{ "Compute ", Cell[BoxData[ \(\[LeftDoubleBracketingBar]T\[RightDoubleBracketingBar]\^k\)]], " for various values of ", Cell[BoxData[ \(k\)]], ". Values are ", Cell[BoxData[ \(5.25, 1.3125, 1.40351, 1.24433, 1.02684, 0.809806\)]], " so uniform scheme is ", Cell[BoxData[ \(\[ScriptCapitalC]\^1\)]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(matrixNorm2D[N[t], 3]\)], "Input"], Cell[BoxData[ \(1.2443293100659578`\)], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Dual subdivision schemes", "Subsection"], Cell[CellGroupData[{ Cell["Dual diagrams", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Show[ Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{{2, 2}, {2, \(-2\)}}], Line[{{0, 2}, {0, \(-2\)}}], \[IndentingNewLine]Line[{{\(-2\), 2}, {\(-2\), \(-2\)}}], Line[{{2, 2}, {\(-2\), 2}}], \[IndentingNewLine]Line[{{2, 0}, {\(-2\), 0}}], Line[{{\(-2\), \(-2\)}, {2, \(-2\)}}], \ \[IndentingNewLine]Point[{0, 0}], Point[{2, 0}], Point[{\(-2\), 0}], \[IndentingNewLine]Point[{2, 2}], Point[{0, 2}], Point[{\(-2\), 2}], \[IndentingNewLine]Point[{0, \(-2\)}], Point[{\(-2\), \(-2\)}], Point[{2, \(-2\)}], \[IndentingNewLine]Dashing[{0.05}], \ \[IndentingNewLine]Line[{{1, \(-2\)}, {1, 2}}], \[IndentingNewLine]Line[{{\(-1\), \(-2\)}, \ {\(-1\), 2}}], \[IndentingNewLine]Line[{{\(-2\), 1}, {2, 1}}], \[IndentingNewLine]Line[{{\(-2\), \(-1\)}, {2, \ \(-1\)}}], \[IndentingNewLine]GrayLevel[ 0.75], \[IndentingNewLine]Point[{1, 1}], Point[{1, \(-1\)}], Point[{\(-1\), \(-1\)}], Point[{\(-1\), 1}]}], AspectRatio \[Rule] Automatic], With[{p0 = {0, 0}, p1 = {2, 0}, p2 = {1, \@3}}, \[IndentingNewLine]Show[ Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{p0, p1}], \[IndentingNewLine]Line[{p0, p2}], \[IndentingNewLine]Line[{p1, p2}], \[IndentingNewLine]Line[{\(p0 + p1\)\/2, \(p1 + \ p2\)\/2}], \[IndentingNewLine]Line[{\(p0 + p1\)\/2, \(p0 + p2\)\/2}], \ \[IndentingNewLine]Line[{\(p0 + p2\)\/2, \(p1 + p2\)\/2}], \ \[IndentingNewLine]Point[p0], Point[p1], Point[p2], \[IndentingNewLine]Dashing[{0.05}], \ \[IndentingNewLine]Line[{\(4 p0 + p1 + p2\)\/6, \(p0 + p1 + p2\)\/3}], \ \[IndentingNewLine]Line[{\(p0 + 4 p1 + p2\)\/6, \(p0 + p1 + p2\)\/3}], \ \[IndentingNewLine]Line[{\(p0 + p1 + 4 p2\)\/6, \(p0 + p1 + p2\)\/3}], \ \[IndentingNewLine]Line[{\(3 p0 + p1\)\/4, \(4 p0 + p1 + p2\)\/6}], Line[{\(3 p0 + p2\)\/4, \(4 p0 + p1 + p2\)\/6}], \ \[IndentingNewLine]Line[{\(3 p1 + p0\)\/4, \(p0 + 4 p1 + p2\)\/6}], Line[{\(3 p1 + p2\)\/4, \(p0 + 4 p1 + p2\)\/6}], \ \[IndentingNewLine]Line[{\(3 p2 + p1\)\/4, \(p0 + p1 + 4 p2\)\/6}], Line[{\(3 p2 + p0\)\/4, \(p0 + p1 + 4 p2\)\/6}], \ \[IndentingNewLine]GrayLevel[ 0.75], \[IndentingNewLine]Point[\(p0 + p1 + p2\)\/3], \ \[IndentingNewLine]Point[\(4 p0 + p1 + p2\)\/6], Point[\(p0 + 4 p1 + p2\)\/6], Point[\(p0 + p1 + 4 p2\)\/6]}], AspectRatio \[Rule] Automatic]]}]]\)], "Input", CellTags->"FIG dual meshes"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Show[ Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{{2, 2}, {2, \(-2\)}}], \[IndentingNewLine]Line[{{\(-2\), 2}, {\(-2\), \(-2\)}}], Line[{{2, 2}, {\(-2\), 2}}], Line[{{\(-2\), \(-2\)}, {2, \(-2\)}}], \ \[IndentingNewLine]Dashing[{0.05}], \[IndentingNewLine]Line[{{2, 0}, {\(-2\), 0}}], \[IndentingNewLine]Line[{{0, \(-2\)}, {0, 2}}], \[IndentingNewLine]GrayLevel[ 0.75], \[IndentingNewLine]Point[{0, 0}]}], AspectRatio \[Rule] Automatic], \[IndentingNewLine]Show[ Graphics[{Thickness[0.01], PointSize[ 0.04], \[IndentingNewLine]Line[{{2, 2}, {2, \(-2\)}}], Line[{{0, 2}, {0, \(-2\)}}], \[IndentingNewLine]Line[{{\(-2\), 2}, {\(-2\), \(-2\)}}], Line[{{2, 2}, {\(-2\), 2}}], \[IndentingNewLine]Line[{{2, 0}, {\(-2\), 0}}], Line[{{\(-2\), \(-2\)}, {2, \(-2\)}}], \ \[IndentingNewLine]Dashing[{0.05}], \[IndentingNewLine]Line[{{1, \(-2\)}, {1, 2}}], \[IndentingNewLine]Line[{{\(-1\), \(-2\)}, \ {\(-1\), 2}}], \[IndentingNewLine]Line[{{\(-2\), 1}, {2, 1}}], \[IndentingNewLine]Line[{{\(-2\), \(-1\)}, {2, \ \(-1\)}}], \[IndentingNewLine]GrayLevel[ 0.75], \[IndentingNewLine]Point[{1, 1}], Point[{1, \(-1\)}], Point[{\(-1\), \(-1\)}], Point[{\(-1\), 1}]}], AspectRatio \[Rule] Automatic]}]]\)], "Input", CellTags->"FIG dual quad subdivision"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Show[ Graphics[{\[IndentingNewLine]Thickness[0.01], PointSize[0.04], \[IndentingNewLine]Line[ Table[{Sin[\(2 \[Pi]\ i\)\/6 + \[Pi]\/6], \(-Cos[\(2 \ \[Pi]\ i\)\/6 + \[Pi]\/6]\)}, {i, 0, 6}]], \[IndentingNewLine]Map[Point, Table[{Sin[\(2 \[Pi]\ i\)\/6 + \[Pi]\/6], \(-Cos[\(2 \ \[Pi]\ i\)\/6 + \[Pi]\/6]\)}, {i, 0, 6}]], \[IndentingNewLine]Text[\(2 n + 1\)\/\(4 n\), \ {1, 0}, {\(-1.5\), 0}], \[IndentingNewLine]Text[\(n + 2\)\/\(8 n\), {1\/2, \ \@3\/2}, {\(-1.5\), 0}], \[IndentingNewLine]Text[ 1\/\(4 n\), {\(-1\)\/2, \@3\/2}, {1.5, 0}], \[IndentingNewLine]Text[ 1\/\(4 n\), {\(-1\), 0}, {1.5, 0}], \[IndentingNewLine]Text[ 1\/\(4 n\), {\(-1\)\/2, \(-\(\@3\/2\)\)}, {1.5, 0}], \[IndentingNewLine]Text[\(n + 2\)\/\(8 n\), {1\/2, \ \(-\(\@3\/2\)\)}, {\(-1.5\), 0}], \[IndentingNewLine]Dashing[{0.05}], \ \[IndentingNewLine]Line[ Table[\(2\/3\) {Sin[\(2 \[Pi]\ i\)\/6 + \[Pi]\/6], \(-Cos[\ \(2 \[Pi]\ i\)\/6 + \[Pi]\/6]\)}, {i, 0, 6}]], GrayLevel[0.75], Point[{2\/3, 0}]}\[IndentingNewLine]], AspectRatio \[Rule] 1, TextStyle \[Rule] {FontSize \[Rule] 12}, PlotRange \[Rule] {{\(-2\), 2}, {\(-1.5\), 1.5}}], \[IndentingNewLine]Show[ Graphics[{\[IndentingNewLine]Thickness[0.01], PointSize[0.04], \[IndentingNewLine]Line[ Table[{Sin[\(2 \[Pi]\ i\)\/6 + \[Pi]\/6], \(-Cos[\(2 \ \[Pi]\ i\)\/6 + \[Pi]\/6]\)}, {i, 0, 6}]], \[IndentingNewLine]Map[Point, Table[{Sin[\(2 \[Pi]\ i\)\/6 + \[Pi]\/6], \(-Cos[\(2 \ \[Pi]\ i\)\/6 + \[Pi]\/6]\)}, {i, 0, 6}]], \[IndentingNewLine]Text[ w[0], {1, 0}, {\(-1.5\), 0}], \[IndentingNewLine]Text[ w[1], {1\/2, \@3\/2}, {\(-1.5\), 0}], \[IndentingNewLine]Text[ w[2], {\(-1\)\/2, \@3\/2}, {1.5, 0}], \[IndentingNewLine]Text[ w[\[Ellipsis]], {\(-1\), 0}, {1.5, 0}], \[IndentingNewLine]Text[ HoldForm[w[n - 2]], {\(-1\)\/2, \(-\(\@3\/2\)\)}, {1.5, 0}], \[IndentingNewLine]Text[ HoldForm[w[n - 1]], {1\/2, \(-\(\@3\/2\)\)}, {\(-1.5\), 0}], \[IndentingNewLine]Dashing[{0.05}], \ \[IndentingNewLine]Line[ Table[\(2\/3\) {Sin[\(2 \[Pi]\ i\)\/6 + \[Pi]\/6], \(-Cos[\ \(2 \[Pi]\ i\)\/6 + \[Pi]\/6]\)}, {i, 0, 6}]], GrayLevel[0.75], Point[{2\/3, 0}]}\[IndentingNewLine]], AspectRatio \[Rule] 1, TextStyle \[Rule] {FontSize \[Rule] 12}, PlotRange \[Rule] {{\(-2\), 2}, {\(-1.5\), 1.5}}]\[IndentingNewLine]}]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Extra: An interactive surface subdivider in Mathematica", "Section"], Cell[TextData[{ "The buttons above control an interactive subdivider written in ", StyleBox["Mathematica", FontSlant->"Italic"], ". Click on the arrow buttons to rotate the object in 3D. The code for \ this application is embedded in the definitions of the buttons and definition \ of the function ", Cell[BoxData[ \(dispMesh\)]], " given below." }], "Text"], Cell[BoxData[Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics3D %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0 1 0 1 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath .5 Mabswid [ ] 0 setdash .868 .56871 m .37984 .70061 L .37289 .83772 L p .569 .317 0 r F P 0 g s .37984 .70061 m .13132 .34885 L .10591 .48792 L p .975 .696 0 r F P 0 g s .10591 .48792 m .37289 .83772 L .37984 .70061 L p .975 .696 0 r F P 0 g s .40077 .6648 m .37984 .70061 L .868 .56871 L p .675 .724 0 r F P 0 g s .37984 .70061 m .40077 .6648 L .19855 .36892 L p .675 .724 0 r F P 0 g s .19855 .36892 m .13132 .34885 L .37984 .70061 L p .675 .724 0 r F P 0 g s .868 .56871 m .81198 .55199 L .40077 .6648 L p .675 .724 0 r F P 0 g s .37289 .83772 m .89081 .70741 L .868 .56871 L p .569 .317 0 r F P 0 g s .40077 .6648 m .81198 .55199 L .83148 .69082 L p .565 .309 0 r F P 0 g s .83148 .69082 m .39492 .80244 L .40077 .6648 L p .565 .309 0 r F P 0 g s .19855 .36892 m .40077 .6648 L .39492 .80244 L p .978 .694 0 r F P 0 g s .89081 .70741 m .37289 .83772 L .39492 .80244 L p .666 .738 0 r F P 0 g s .37289 .83772 m .10591 .48792 L .17797 .50807 L p .666 .738 0 r F P 0 g s .17797 .50807 m .39492 .80244 L .37289 .83772 L p .666 .738 0 r F P 0 g s .81198 .55199 m .868 .56871 L .69381 .16339 L p .675 .724 0 r F P 0 g s .69381 .16339 m .868 .56871 L .89081 .70741 L p .899 .585 0 r F P 0 g s .81198 .55199 m .66125 .21911 L .67303 .35704 L p .92 .606 0 r F P 0 g s .67303 .35704 m .83148 .69082 L .81198 .55199 L p .92 .606 0 r F P 0 g s .69381 .16339 m .66125 .21911 L .81198 .55199 L p .675 .724 0 r F P 0 g s .39492 .80244 m .17797 .50807 L .19855 .36892 L p .978 .694 0 r F P 0 g s .39492 .80244 m .83148 .69082 L .89081 .70741 L p .666 .738 0 r F P 0 g s .89081 .70741 m .70832 .30052 L .69381 .16339 L p .899 .585 0 r F P 0 g s .70832 .30052 m .89081 .70741 L .83148 .69082 L p .666 .738 0 r F P 0 g s .83148 .69082 m .67303 .35704 L .70832 .30052 L p .666 .738 0 r F P 0 g s .66125 .21911 m .19855 .36892 L .17797 .50807 L p .499 .203 0 r F P 0 g s .13132 .34885 m .19855 .36892 L .66125 .21911 L p .675 .724 0 r F P 0 g s .10591 .48792 m .13132 .34885 L .3528 .3079 L p .489 .189 0 r F P 0 g s .66125 .21911 m .69381 .16339 L .13132 .34885 L p .675 .724 0 r F P 0 g s .13132 .34885 m .69381 .16339 L .44799 .27693 L p .489 .189 0 r F P 0 g s .44799 .27693 m .3528 .3079 L .13132 .34885 L p .489 .189 0 r F P 0 g s .3528 .3079 m .34765 .37711 L .10591 .48792 L p .489 .189 0 r F P 0 g s .34765 .37711 m .3528 .3079 L .26331 .21523 L p .885 .544 .399 r F P 0 g s .45538 .14949 m .26331 .21523 L .3528 .3079 L p .655 .608 .789 r F P 0 g s .3528 .3079 m .44799 .27693 L .45538 .14949 L p .655 .608 .789 r F P 0 g s .17797 .50807 m .67303 .35704 L .66125 .21911 L p .499 .203 0 r F P 0 g s .44799 .27693 m .69381 .16339 L .70832 .30052 L p .489 .189 0 r F P 0 g s .70832 .30052 m .44615 .34599 L .44799 .27693 L p .489 .189 0 r F P 0 g s .45202 .28639 m .45538 .14949 L .44799 .27693 L p 0 0 .006 r F P 0 g s .44799 .27693 m .44615 .34599 L .45202 .28639 L p 0 0 .006 r F P 0 g s .26331 .21523 m .45538 .14949 L .45202 .28639 L p .467 .155 .353 r F P 0 g s .26331 .21523 m .24599 .35311 L .34765 .37711 L p .885 .544 .399 r F P 0 g s .45202 .28639 m .24599 .35311 L .26331 .21523 L p .467 .155 .353 r F P 0 g s .67303 .35704 m .17797 .50807 L .10591 .48792 L p .666 .738 0 r F P 0 g s .70832 .30052 m .10591 .48792 L .34765 .37711 L p .489 .189 0 r F P 0 g s .10591 .48792 m .70832 .30052 L .67303 .35704 L p .666 .738 0 r F P 0 g s .44615 .34599 m .34765 .37711 L .24599 .35311 L p .623 .875 .989 r F P 0 g s .34765 .37711 m .44615 .34599 L .70832 .30052 L p .489 .189 0 r F P 0 g s .24599 .35311 m .45202 .28639 L .44615 .34599 L p .623 .875 .989 r F P 0 g s % End of Graphics MathPictureEnd \ \>"], "Graphics", ShowSelection->False, ImageSize->{432, 432}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHg/0003o00300000o`<0000000<0MbMJ000000000?l0jP000?l00;d0003o0`00000407LWFP03 000000000?l0003o0>T0003o002j0000o`<000001`1g9eX00`000000003o0000o`3Y0000o`00]`00 0?l3000000X0MbMJ00<000000000o`000?l0j@000?l00;@0003o0`00000=07LWFP03000000000?l0 003o0>T0003o002a0000o`<00000401g9eX00`000000003o0000o`1S0000o`800000Q0000?l00:h0 003o0`00000C07LWFP03000000000?l0003o0600003o0`0000000`1m<00000000000o`230000o`00 Z`000?l3000001H0MbMJ00<000000000o`000?l0G@000?l4000000<0OC000P0000230000o`00Z000 0?l3000001T0MbMJ00<000000000o`000?l0FP000?l5000000D0OC0000<000000>JE00000?l0PP00 0?l00:D0003o0`00000L07LWFP03000000000?l0003o05L0003o0`0000000`1m<000000000000007 07d`00030000003VU@0000000880003o002R0000o`<000007`1g9eX00`000000003o0000o`1D0000 o`<000000P1m<002000000X0OC000P0000220000o`00W`000?l300000280MbMJ00<000000000o`00 0?l0D@000?l300000080OC000`00000<07d`00030000003VU@0000000840003o002L0000o`<00000 9@1g9eX00`000000003o0000o`1>0000o`<000000`1m<002000000l0OC0000<000000>JE00000000 P@000?l009X0003o0P00000X07LWFP03000000000?l0003o04/0003o0`00000407d`008000004@1m <0000`000000iYD0000000210000o`00U`000?l3000002T0MbMJ00<000000000o`000?l0B@000?l3 000000D0OC000P00000C07d`00040000003VU@00iYD000000800003o002D0000o`<00000;01g9eX0 0`000000003o0000o`160000o`<000001P1m<002000001D0OC0000@000000>JE003VU@000000P000 0?l00940003o0`00000_07LWFP03000000000?l0003o04<0003o0`00000707d`008000005`1m<000 1@000000iYD00>JE003VU@00000007l0003o002>0000o`<00000JE003VU@00iYD00000001o0000o`00R`000?l3 000003D0MbMJ00<000000000o`000?l0?0000?l4000000P0OC000P00000L07d`00030000003VU@00 iYD00080iYD000<000000000o`000?l0O0000?l008P0003o0`00000h07LWFP03000000000?l0003o 03T0003o0`00000:07d`008000007P1m<0000`000000iYD00>JE00020>JE0003000000000?l0003o 07`0003o00250000o`<00000>`1g9eX00`000000003o0000o`0f0000o`<000002`1m<00200000240 OC0000D000000>JE003VU@00iYD00000001n0000o`00PP000?l3000003h0MbMJ00<000000000o`00 0?l0<`000?l3000000`0OC000P00000S07d`00030000003VU@00iYD00080iYD000<000000000o`00 0?l0N`000?l007l0003o0`00001107LWFP03000000000?l0003o0300003o0`00000=07d`00800000 9@1m<0000`000000iYD00>JE00020>JE0003000000000?l0003o07/0003o001l0000o`<00000A01g 9eX00`000000003o0000o`0]0000o`<000003@1m<003000002L0OC0000<000000>JE003VU@000`3V U@000`000000003o0000o`1j0000o`00N@000?l3000004L0MbMJ00<000000000o`000?l0:P000?l3 000000h0OC000P00000Z07d`00030000003VU@00iYD000<0iYD000<000000000o`000?l0NP000?l0 07H0003o0`00001:07LWFP03000000000?l0003o02L0003o0`00000?07d`00800000;01m<0000`00 0000iYD00>JE00040>JE0003000000000?l0003o07T0003o001c0000o`<00000C@1g9eX00`000000 003o0000o`0T0000o`<00000401m<002000002h0OC0000<000000>JE003VU@00103VU@000`000000 003o0000o`1i0000o`00L@000?l200000500MbMJ00<000000000o`000?l08@000?l300000140OC00 0P00000`07d`00030000003VU@00iYD000@0iYD000<000000000o`000?l0N@000?l00740003o00<0 000007LWFP1g9eX0C`1g9eX00`000000003o0000o`0N0000o`<000004P1m<00200000380OC0000<0 00000>JE003VU@001@3VU@000`000000003o0000o`1h0000o`00L@000?l00`000000MbMJ07LWFP1? 07LWFP03000000000?l0003o01/0003o0`00000C07d`00800000=01m<0000`000000iYD00>JE0005 0>JE0003000000000?l0003o07P0003o001a0000o`030000001g9eX0MbMJ04l0MbMJ00<000000000 o`000?l060000?l3000001<0OC000`00000g07d`00030000003VU@00iYD000D0iYD000<000000000 o`000?l0M`000?l00740003o00<0000007LWFP1g9eX0C`1g9eX00`000000003o0000o`0E0000o`<0 0000501m<002000003X0OC0000<000000>JE003VU@001@3VU@000`000000003o0000o`1g0000o`00 L0000?l00`000000MbMJ07LWFP1@07LWFP03000000000?l0003o0180003o0`00000E07d`00800000 ?01m<0000`000000iYD00>JE00060>JE0003000000000?l0003o07H0003o001`0000o`030000001g 9eX0MbMJ0500MbMJ00<000000000o`000?l03`000?l3000001H0OC000P00000n07d`00030000003V U@00iYD000H0iYD000<000000000o`000?l0MP000?l00700003o00<0000007LWFP1g9eX0D01g9eX0 0`000000003o0000o`0<0000o`<000005`1m<00200000400OC0000<000000>JE003VU@001P3VU@00 0`000000003o0000o`1f0000o`00L0000?l00`000000MbMJ07LWFP1@07LWFP03000000000?l0003o 00T0003o0`00000H07d`00800000@P1m<0000`000000iYD00>JE00070>JE0003000000000?l0003o 07D0003o001`0000o`030000001g9eX0MbMJ0500MbMJ00<000000000o`000?l01P000?l3000001P0 OC000`00001407d`00030000003VU@00iYD000L0iYD000<000000000o`000?l0M@000?l00700003o 00<0000007LWFP1g9eX0D01g9eX00`000000003o0000o`030000o`<000006@1m<002000004L0OC00 00<000000>JE003VU@00203VU@000`000000003o0000o`1d0000o`00L0000?l00`000000MbMJ07LW FP1@07LWFP03000000000?l0003o00<000006P1m<002000004T0OC0000<000000>JE003VU@00203V U@000`000000003o0000o`1d0000o`00L0000?l00`000000MbMJ07LWFP1@07LWFP<000006`1m<002 000004/0OC0000<000000>JE003VU@002@3VU@000`000000003o0000o`1c0000o`00K`000?l00`00 0000MbMJ07LWFP1A07LWFP030000001m<000OC0001T0OC000P00001>07d`00030000003VU@00iYD0 00P0iYD000<000000000o`000?l0L`000?l006l0003o00<0000007LWFP1g9eX0D@1g9eX00`000000 OC0007d`000G07d`00800000D01m<0000`000000iYD00>JE00080>JE0003000000000?l0003o07<0 003o001_0000o`030000001g9eX0MbMJ0540MbMJ00<0000007d`001m<000501m<00300000580OC00 00<000000>JE003VU@002@3VU@000`000000003o0000o`1b0000o`00K`000?l00`000000MbMJ07LW FP1A07LWFP030000001m<000OC000180OC000P00001E07d`00030000003VU@00iYD000T0iYD000<0 00000000o`000?l0LP000?l006l0003o00<0000007LWFP1g9eX0D01g9eX00`000000OC0007d`000A 07d`00800000E`1m<0000`000000iYD00>JE000:0>JE0003000000000?l0003o0740003o001_0000 o`030000001g9eX0MbMJ0500MbMJ00<0000007d`001m<0003`1m<002000005T0OC0000<000000>JE 003VU@002P3VU@000`000000003o0000o`1a0000o`00K`000?l00`000000MbMJ07LWFP1@07LWFP03 0000001m<000OC0000d0OC000P00001K07d`00030000003VU@00iYD000/0iYD000<000000000o`00 0?l0L0000?l006l0003o00<0000007LWFP1g9eX0D01g9eX00`000000OC0007d`000;07d`00800000 G@1m<0000`000000iYD00>JE000;0>JE0003000000000?l0003o0700003o001_0000o`030000001g 9eX0MbMJ0500MbMJ00<0000007d`001m<000201m<003000005l0OC0000<000000>JE003VU@002`3V U@000`000000003o0000o`1`0000o`00KP000?l00`000000MbMJ07LWFP1A07LWFP030000001m<000 OC0000H0OC000P00001R07d`00030000003VU@00iYD000`0iYD000<000000000o`000?l0K`000?l0 06h0003o00<0000007LWFP1g9eX0D@1g9eX00`000000OC0007d`000407d`00800000I@1m<0000`00 0000iYD00>JE000;0>JE0003000000000?l0003o06l0003o001^0000o`030000001g9eX0MbMJ0540 MbMJ00<0000007d`001m<0000P1m<002000006L0OC0000<000000>JE003VU@00303VU@000`000000 003o0000o`1^0000o`00KP000?l00`000000MbMJ07LWFP1A07LWFP030000001m<000OC0000800000 J@1m<0000`000000iYD00>JE000<0>JE0003000000000?l0003o06h0003o001^0000o`030000001g 9eX0MbMJ0540MbMJ0`00001[07d`00030000003VU@00iYD000d0iYD000<000000000o`000?l0K@00 0?l006h0003o00<0000007LWFP1g9eX0D@1g9eX00`000000OC0007d`001[07d`00030000003VU@00 iYD000d0iYD000<000000000o`000?l0K@000?l006h0003o00<0000007LWFP1g9eX0D@1g9eX00`00 0000OC0007d`001[07d`00030000003VU@00iYD000d0iYD000<000000000o`000?l0K@000?l006h0 003o00<0000007LWFP1g9eX0D@1g9eX00`000000OC0007d`001[07d`00030000003VU@00iYD000h0 iYD000<000000000o`000?l0K0000?l006d0003o00<0000007LWFP1g9eX0DP1g9eX00`000000OC00 07d`001[07d`00030000003VU@00iYD000h0iYD000<000000000o`000?l0K0000?l006d0003o00<0 000007LWFP1g9eX0D@1g9eX2000006d0OC0000<000000>JE003VU@003`3VU@000`000000003o0000 o`1[0000o`00K@000?l00`000000MbMJ07LWFP1>07LWFP<0000000<0Wmom0000001m<000K01m<000 0`000000iYD00>JE000?0>JE0003000000000?l0003o06/0003o001]0000o`030000001g9eX0MbMJ 04/0MbMJ0`00000409oOo@030000001m<000OC0006`0OC0000<000000>JE003VU@003`3VU@000`00 0000003o0000o`1Z0000o`00K@000?l00`000000MbMJ07LWFP1807LWFP<000001`2Ogod00`000000 OC0007d`001/07d`00030000003VU@00iYD000l0iYD000<000000000o`000?l0JP000?l006d0003o 00<0000007LWFP1g9eX0A@1g9eX3000000X0Wmom00<0000007d`001m<000K01m<0000`000000iYD0 0>JE000?0>JE0003000000000?l0003o06X0003o001]0000o`030000001g9eX0MbMJ0480MbMJ0`00 000=09oOo@030000001m<000OC0006`0OC0000<000000>JE003VU@00403VU@000`000000003o0000 o`1Y0000o`00K@000?l00`000000MbMJ07LWFP0o07LWFP<00000402Ogod00`000000OC0007d`001Z 07d`00<000004P3VU@000`000000003o0000o`1Y0000o`00K@000?l00`000000MbMJ07LWFP0l07LW FP<000004P2Ogod00`000000OC0007d`001U07d`00P0000000<0Z[`00>JE003VU@004@3VU@000`00 0000003o0000o`1X0000o`00K0000?l00`000000MbMJ07LWFP0j07LWFP<000005@2Ogod00`000000 OC0007d`001O07d`00X000000`2Z_0000`000000Z[`00000000B0>JE0003000000000?l0003o06P0 003o001/0000o`030000001g9eX0MbMJ03L0MbMJ0`00000H09oOo@030000001m<000OC0005X0OC00 1@00000307d`00<000001P2Z_00010000000Z[`00:Zl0000000C0>JE0003000000000?l0003o06L0 003o001[0000o`800000=P1g9eX3000001/0Wmom00<0000007d`001m<000E01m<006000000D0OC00 0`0000080:Zl00030000002Z_000Z[`00080Z[`000<000000>JE003VU@00403VU@000`000000003o 0000o`1W0000o`00J0000?l30000000307d`00000000MbMJ0380MbMJ0`00000N09oOo@030000001m <000OC0004h0OC001P00000807d`00<000002`2Z_0000`000000Z[`00:Zl00020:Zl00030000003V U@00iYD00100iYD000<000000000o`000?l0I`000?l006D0003o0`00000407d`00030000001g9eX0 MbMJ02h0MbMJ0`00000Q09oOo@030000001m<000OC0004T0OC001@00000;07d`00<000003@2Z_000 0`000000Z[`00:Zl00040:Zl00030000003VU@00iYD00100iYD000<000000000o`000?l0IP000?l0 0680003o0`00000707d`00030000001g9eX0MbMJ02/0MbMJ0`00000T09oOo@030000001m<000OC00 04<0OC001P00000<07d`00@00000402Z_0000`000000Z[`00:Zl00040:Zl00030000003VU@00iYD0 0100iYD000<000000000o`000?l0IP000?l005h0003o1000000:07d`00030000001g9eX0MbMJ02P0 MbMJ0`00000W09oOo@030000001m<000OC0003d0OC001P00000?07d`00<000004`2Z_0000`000000 Z[`00:Zl00060:Zl00030000003VU@00iYD00100iYD000<000000000o`000?l0I@000?l005/0003o 0`00000>07d`00030000001g9eX0MbMJ02@0MbMJ1000000Z09oOo@030000001m<000OC0003P0OC00 1@00000B07d`00<000005@2Z_0000`000000Z[`00:Zl00070:Zl00030000003VU@00iYD00100iYD0 00<000000000o`000?l0I@000?l005P0003o0`00000A07d`00030000001g9eX0MbMJ0240MbMJ0`00 000^09oOo@030000001m<000OC000380OC001P00000D07d`00<00000602Z_0000`000000Z[`00:Zl 00070:Zl00030000003VU@00iYD00140iYD000<000000000o`000?l0I0000?l005D0003o0`00000C 07d`00030000001g9eX0MbMJ01l0MbMJ0`00000a09oOo@030000001m<000OC0002d0OC001@00000G 07d`00<000006P2Z_0000`000000Z[`00:Zl00090:Zl00030000003VU@00iYD00100iYD000<00000 0000o`000?l0I0000?l00580003o0`00000A07d`00H000007P1g9eX3000003@0Wmom00<0000007d` 001m<0009`1m<006000001P0OC001000000L0:Zl00030000002Z_000Z[`000X0Z[`000<000000>JE 003VU@00403VU@000`000000003o0000o`1T0000o`00C`000?l3000000l0OC001@00000507d`0003 0000001g9eX0MbMJ01T0MbMJ0`00000g09oOo@030000001m<000OC000240OC001P00000K07d`00<0 0000802Z_0000`000000Z[`00:Zl000;0:Zl00030000003VU@00iYD00100iYD000<000000000o`00 0?l0H`000?l004`0003o0`00000<07d`00H000002P1m<0000`000000MbMJ07LWFP0F07LWFP<00000 >@2Ogod00`000000OC0007d`000M07d`00D000007P1m<00300000280Z[`000<000000:Zl002Z_000 302Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o06<0003o00190000o`<000002P1m <00500000100OC0000<0000007LWFP1g9eX04`1g9eX3000003`0Wmom00<0000007d`001m<0005`1m <00600000200OC000`00000U0:Zl00030000002Z_000Z[`000d0Z[`000<000000>JE003VU@00403V U@000`000000003o0000o`1R0000o`00AP000?l3000000P0OC001@00000E07d`00030000001g9eX0 MbMJ0100MbMJ0`00000o09oOo@030000001m<000OC000140OC001P00000S07d`00<000009`2Z_000 0`000000Z[`00:Zl000>0:Zl00030000003VU@00iYD00100iYD000<000000000o`000?l0HP000?l0 04<0003o0`00000507d`00H000006P1m<0000`000000MbMJ07LWFP0=07LWFP<00000@P2Ogod00`00 0000OC0007d`000<07d`00D000009@1m<004000002T0Z[`000<000000:Zl002Z_000402Z_0000`00 0000iYD00>JE000@0>JE0003000000000?l0003o0640003o00100000o`<000000`1m<00500000200 OC0000<0000007LWFP1g9eX02P1g9eX3000004D0Wmom00<0000007d`001m<0001P1m<006000002L0 OC000`00000]0:Zl00030000002Z_000Z[`00100Z[`000<000000>JE003VU@00403VU@000`000000 003o0000o`1Q0000o`00?@000?l30000000307d`00000000000000<00000901m<0000`000000MbMJ 07LWFP0807LWFP<00000B02Ogod00`000000OC0007d`0006000002X0OC000`00000_0:Zl00030000 002Z_000Z[`00140Z[`000<000000>JE003VU@00403VU@000`000000003o0000o`1Q0000o`00>P00 0?l7000002T0OC0000<0000007LWFP1g9eX01@1g9eX3000004/0Wmom0`00000]07d`00<00000<@2Z _0000`000000Z[`00:Zl000C0:Zl00030000003VU@00iYD00100iYD000<000000000o`000?l0H000 0?l003P0003o0`00000_07d`00030000001g9eX0MbMJ0080MbMJ0`00001:09oOo@<00000;@1m<004 000003@0Z[`000<000000:Zl002Z_0004`2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0 003o0600003o000h0000o`030000001m<000OC0002l0OC0000<0000007LWFP0000000P00001909oO o@@00000;@1m<003000003L0Z[`000<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000@0>JE 0003000000000?l0003o05l0003o000h0000o`030000001m<000OC0002l0OC000`00001809oOo@<0 0000;P1m<003000003X0Z[`000<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000@0>JE0003 000000000?l0003o05l0003o000g0000o`030000001m<000OC0003<0OC001000001109oOo@<00000 ;P1m<003000003`0Z[`000<000000:Zl002Z_0005`2Z_0000`000000iYD00>JE000@0>JE00030000 00000?l0003o05h0003o000g0000o`030000001m<000OC0003L0OC001000000i09oOo@@00000;P1m <003000003/0Z[`00`0000000`000?l000000:Zl000H0:Zl00030000003VU@00iYD00100iYD000<0 00000000o`000?l0GP000?l003L0003o00<0000007d`001m<000>`1m<00500000340Wmom0`00000^ 07d`00@00000>P2Z_004000000D0003o00<000000:Zl002Z_0005`2Z_0000`000000iYD00>JE000? 0>JE0003000000000?l0003o05h0003o000g0000o`030000001m<000OC000400OC001000000Z09oO o@<00000;P1m<003000003/0Z[`00`0000090000o`030000002Z_000Z[`001L0Z[`000<000000>JE 003VU@00403VU@000`000000003o0000o`1M0000o`00=`000?l00`000000OC0007d`001407d`00@0 00008P2Ogod4000002h0OC000`00000k0:Zl00<000003@000?l00`000000Z[`00:Zl000F0:Zl0003 0000003VU@00iYD00100iYD000<000000000o`000?l0G@000?l003L0003o00<0000007d`001m<000 B01m<004000001/0Wmom0`00000_07d`00<00000>P2Z_00400000100003o00<000000:Zl002Z_000 5`2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o05`0003o000f0000o`030000001m <000OC0004d0OC001@00000C09oOo@<00000;`1m<003000003X0Z[`00`00000E0000o`030000002Z _000Z[`001H0Z[`000<000000>JE003VU@00403VU@000`000000003o0000o`1L0000o`00=P000?l0 0`000000OC0007d`001B07d`00@000002`2Ogod4000002h0OC001000000j0:Zl00<0000060000?l0 0`000000Z[`00:Zl000G0:Zl00030000003VU@00iYD00100iYD000<000000000o`000?l0F`000?l0 03H0003o00<0000007d`001m<000EP1m<004000000@0Wmom0`00000_07d`00<00000>`2Z_0030000 01`0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o 05/0003o000f0000o`030000001m<000OC0005X0OC001000000_07d`00<00000>P2Z_004000001l0 003o00<000000:Zl002Z_0005`2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o05/0 003o000f0000o`030000001m<000OC0005T0OC000P00000_07d`00<00000>P2Z_003000002@0003o 00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o05X0003o 000e0000o`030000001m<000OC0005P0OC000P00000^07d`00<00000>P2Z_003000002L0003o00<0 00000:Zl002Z_0005`2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o05X0003o000e 0000o`030000001m<000OC0005H0OC000P00000/07d`00@00000>@2Z_004000002/0003o00<00000 0:Zl002Z_0005P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o05T0003o000e0000 o`030000001m<000OC0005@0OC000P00000[07d`00<00000>P2Z_003000002l0003o00<000000:Zl 002Z_0005P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o05T0003o000e0000o`03 0000001m<000OC000580OC000P00000Z07d`00<00000>P2Z_003000003<0003o00<000000:Zl002Z _0005P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o05P0003o000e0000o`030000 001m<000OC0004l0OC000`00000Y07d`00<00000>@2Z_004000003H0003o00<000000:Zl002Z_000 5P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o05P0003o000e0000o`030000001m <000OC0004d0OC000P00000Y07d`00<00000>@2Z_003000003/0003o00<000000:Zl002Z_0005P2Z _0000`000000iYD00>JE000?0>JE0003000000000?l0003o05P0003o000d0000o`030000001m<000 OC0004`0OC000P00000W07d`00@00000>@2Z_003000003h0003o00<000000:Zl002Z_0005P2Z_000 0`000000iYD00>JE000@0>JE0003000000000?l0003o05L0003o000d0000o`030000001m<000OC00 04X0OC000P00000V07d`00<00000>P2Z_00300000440003o00<000000:Zl002Z_0005`2Z_0000`00 0000iYD00>JE000?0>JE0003000000000?l0003o05L0003o000d0000o`030000001m<000OC0004P0 OC000P00000U07d`00<00000>@2Z_004000004D0003o00<000000:Zl002Z_0005P2Z_0000`000000 iYD00>JE000@0>JE0003000000000?l0003o05H0003o000d0000o`030000001m<000OC0004H0OC00 0P00000T07d`00<00000>@2Z_003000004T0003o00<000000:Zl002Z_0005`2Z_0000`000000iYD0 0>JE000?0>JE0003000000000?l0003o05H0003o000d0000o`030000001m<000OC0004<0OC000`00 000R07d`00@00000>@2Z_003000004d0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE 000@0>JE0003000000000?l0003o05D0003o000c0000o`030000001m<000OC000480OC000P00000R 07d`00<00000>@2Z_00400000500003o00<000000:Zl002Z_0005`2Z_0000`000000iYD00>JE000? 0>JE0003000000000?l0003o05D0003o000c0000o`030000001m<000OC000400OC000P00000Q07d` 00<00000>@2Z_003000005D0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE 0003000000000?l0003o05D0003o000c0000o`030000001m<000OC0003h0OC000P00000P07d`00<0 0000>@2Z_003000005P0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000@0>JE0003 000000000?l0003o05@0003o000c0000o`030000001m<000OC0003`0OC000P00000O07d`00<00000 >@2Z_003000005`0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE00030000 00000?l0003o05@0003o000c0000o`030000001m<000OC0003X0OC000P00000M07d`00@00000>02Z _004000005l0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000@0>JE000300000000 0?l0003o05<0003o000b0000o`030000001m<000OC0003P0OC000`00000L07d`00<00000>@2Z_003 000006@0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0 003o05<0003o000b0000o`030000001m<000OC0003H0OC000P00000L07d`00<00000>@2Z_0030000 06L0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o 0580003o000b0000o`030000001m<000OC0003@0OC000P00000K07d`00<00000>02Z_004000006/0 003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o0580 003o000b0000o`030000001m<000OC000380OC000P00000J07d`00<00000>02Z_003000006l0003o 00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o0580003o 000b0000o`030000001m<000OC000300OC000P00000H07d`00@00000>02Z_003000007<0003o00<0 00000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o0540003o000b 0000o`030000001m<000OC0002h0OC000P00000G07d`00<00000>@2Z_003000007H0003o00<00000 0:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o0540003o000a0000 o`030000001m<000OC0002`0OC000`00000F07d`00<00000>02Z_004000007X0003o00<000000:Zl 002Z_0005@2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o0500003o000a0000o`03 0000001m<000OC0002X0OC000P00000F07d`00<00000>02Z_003000007h0003o00<000000:Zl002Z _0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o0500003o000a0000o`030000 001m<000OC0002P0OC000P00000E07d`00<00000>02Z_00300000880003o00<000000:Zl002Z_000 5@2Z_0000`000000iYD00>JE000@0>JE0003000000000?l0003o04l0003o000a0000o`030000001m <000OC0002H0OC000P00000C07d`00@00000=`2Z_004000008D0003o00<000000:Zl002Z_0005P2Z _0000`000000iYD00>JE000?0>JE0003000000000?l0003o04l0003o000a0000o`030000001m<000 OC0002@0OC000P00000B07d`00<00000>02Z_003000008T0003o00<000000:Zl002Z_0005P2Z_000 0`000000iYD00>JE000?0>JE0003000000000?l0003o04l0003o000`0000o`030000001m<000OC00 02<0OC000P00000A07d`00<00000>02Z_003000008d0003o00<000000:Zl002Z_0005P2Z_0000`00 0000iYD00>JE000?0>JE0003000000000?l0003o04h0003o000`0000o`030000001m<000OC000200 OC000`00000@07d`00<00000=`2Z_00400000900003o00<000000:Zl002Z_0005P2Z_0000`000000 iYD00>JE000?0>JE0003000000000?l0003o04h0003o000`0000o`030000001m<000OC0001h0OC00 0P00000?07d`00@00000=`2Z_003000009D0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD0 0>JE000?0>JE0003000000000?l0003o04d0003o000`0000o`030000001m<000OC0001`0OC000P00 000>07d`00<00000>02Z_003000009P0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE 000?0>JE0003000000000?l0003o04d0003o000`0000o`030000001m<000OC0001X0OC000P00000= 07d`00<00000>02Z_003000009`0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000@ 0>JE0003000000000?l0003o04`0003o000`0000o`030000001m<000OC0001P0OC000P00000<07d` 00<00000=`2Z_004000009l0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE 0003000000000?l0003o04`0003o000_0000o`030000001m<000OC0001L0OC000P00000;07d`00<0 0000=`2Z_00300000:@0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003 000000000?l0003o04`0003o000_0000o`030000001m<000OC0001@0OC000`00000907d`00@00000 =`2Z_00300000:L0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE00030000 00000?l0003o04/0003o000_0000o`030000001m<000OC000180OC000P00000907d`00<00000=`2Z _00400000:/0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE000300000000 0?l0003o04/0003o000_0000o`030000001m<000OC000100OC000P00000807d`00<00000=`2Z_003 00000:l0003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0 003o04X0003o000_0000o`030000001m<000OC0000h0OC000P00000707d`00<00000=`2Z_0030000 0;<0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o 04X0003o000^0000o`030000001m<000OC0000d0OC000P00000607d`00<00000=`2Z_00300000;H0 003o00<000000:Zl002Z_0005P2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o04T0 003o000^0000o`030000001m<000OC0000/0OC000P00000407d`00@00000=P2Z_00400000;X0003o 00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o04T0003o 000^0000o`030000001m<000OC0000P0OC000`00000307d`00<00000=`2Z_00300000;h0003o00<0 00000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o04T0003o000^ 0000o`030000001m<000OC0000H0OC000P00000307d`00<00000=`2Z_00300000<80003o00<00000 0:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0003o04P0003o000^0000 o`030000001m<000OC0000@0OC000P00000207d`00<00000=P2Z_00400000JE000?0>JE0003000000000?l0003o04P0003o000^0000o`03 0000001m<000OC000080OC000P000000101m<000000000000000000f0:Zl00<00000103j/@000`00 0000003o0000o`320000o`030000002Z_000Z[`001H0Z[`000<000000>JE003VU@003`3VU@000`00 0000003o0000o`170000o`00;@000?l010000000OC0007d`001m<005000003H0Z[`00`0000080?Za 0003000000000?l0003o0<80003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE 0003000000000?l0003o04L0003o000]0000o`030000001m<000000000800000=P2Z_004000000/0 n[4000<000000000o`000?l0`P000?l00`000000Z[`00:Zl000F0:Zl00030000003VU@00iYD000l0 iYD000<000000000o`000?l0AP000?l002d0003o0P00000f0:Zl00<00000403j/@000`000000003o 0000o`320000o`030000002Z_000Z[`001D0Z[`000<000000>JE003VU@003`3VU@000`000000003o 0000o`160000o`00;P000?l5000002l0Z[`00`00000D0?Za0003000000000?l0003o0<40003o00<0 00000:Zl002Z_0005P2Z_0000`000000iYD00>JE000>0>JE0003000000000?l0003o04H0003o000_ 0000o`040000002Z_000Z[`00:Zl00@00000:02Z_003000001L0n[4000<000000000o`000?l0`P00 0?l00`000000Z[`00:Zl000E0:Zl00030000003VU@00iYD000l0iYD000<000000000o`000?l0A@00 0?l002l0003o00<000000:Zl002Z_0001@2Z_00400000200Z[`01000000K0?Za0003000000000?l0 003o0<40003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0 003o04D0003o000`0000o`030000002Z_000Z[`000P0Z[`01000000I0:Zl00<00000803j/@000`00 0000003o0000o`310000o`030000002Z_000Z[`001D0Z[`000<000000>JE003VU@003`3VU@000`00 0000003o0000o`140000o`00<@000?l00`000000Z[`00:Zl000;0:Zl00@000004P2Z_003000002<0 n[4000<000000000o`000?l0`@000?l00`000000Z[`00:Zl000E0:Zl00030000003VU@00iYD000l0 iYD000<000000000o`000?l0A0000?l00380003o00<000000:Zl002Z_0003P2Z_004000000X0Z[`0 1000000W0?Za0003000000000?l0003o0<40003o00<000000:Zl002Z_0005@2Z_0000`000000iYD0 0>JE000?0>JE0003000000000?l0003o04<0003o000b0000o`030000002Z_000Z[`00180Z[`01000 00030:Zl00<00000;03j/@000`000000003o0000o`300000o`030000002Z_000Z[`001D0Z[`000<0 00000>JE003VU@003`3VU@000`000000003o0000o`130000o`00<`000?l00`000000Z[`00:Zl000E 0:Zl00<00000;`3j/@000`000000003o0000o`310000o`030000002Z_000Z[`001D0Z[`000<00000 0>JE003VU@003P3VU@000`000000003o0000o`130000o`00=0000?l00`000000Z[`00:Zl000F0:Zl 00030000003j/@00n[4002h0n[4000<000000000o`000?l0`0000?l00`000000Z[`00:Zl000E0:Zl 00030000003VU@00iYD000l0iYD000<000000000o`000?l0@P000?l003D0003o00<000000:Zl002Z _0005@2Z_0000`000000n[400?Za000_0?Za0003000000000?l0003o0<00003o00<000000:Zl002Z _0005@2Z_0000`000000iYD00>JE000>0>JE0003000000000?l0003o0480003o000e0000o`030000 002Z_000Z[`001H0Z[`000<000000?Za003j/@00;P3j/@000`000000003o0000o`300000o`030000 002Z_000Z[`001D0Z[`000<000000>JE003VU@003`3VU@000`000000003o0000o`110000o`00=P00 0?l00`000000Z[`00:Zl000F0:Zl00030000003j/@00n[4002h0n[4000<000000000o`000?l0`000 0?l00`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000l0iYD000<000000000o`000?l0@@00 0?l003L0003o00<000000:Zl002Z_0005P2Z_0000`000000n[400?Za000^0?Za0003000000000?l0 003o0;l0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000?0>JE0003000000000?l0 003o0400003o000h0000o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00;`3j/@000`00 0000003o0000o`2o0000o`030000002Z_000Z[`001@0Z[`000<000000>JE003VU@003`3VU@000`00 0000003o0000o`100000o`00>0000?l00`000000Z[`00:Zl000F0:Zl00030000003j/@00n[4002h0 n[4000<000000000o`000?l0_`000?l00`000000Z[`00:Zl000E0:Zl00030000003VU@00iYD000h0 iYD000<000000000o`000?l0@0000?l003T0003o00<000000:Zl002Z_0005P2Z_0000`000000n[40 0?Za000^0?Za0003000000000?l0003o0;h0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD0 0>JE000?0>JE0003000000000?l0003o03l0003o000j0000o`030000002Z_000Z[`001H0Z[`000<0 00000?Za003j/@00;P3j/@000`000000003o0000o`2n0000o`030000002Z_000Z[`001D0Z[`000<0 00000>JE003VU@003P3VU@000`000000003o0000o`0o0000o`00>`000?l00`000000Z[`00:Zl000E 0:Zl00030000003j/@00n[4002h0n[4000<000000000o`000?l0_P000?l00`000000Z[`00:Zl000E 0:Zl00030000003VU@00iYD000l0iYD000<000000000o`000?l0?P000?l003/0003o00<000000:Zl 002Z_0005P2Z_0000`000000n[400?Za000^0?Za0003000000000?l0003o0;h0003o00<000000:Zl 002Z_0005@2Z_0000`000000iYD00>JE000>0>JE0003000000000?l0003o03h0003o000l0000o`03 0000002Z_000Z[`001H0Z[`000<000000?Za003j/@00;P3j/@000`000000003o0000o`2m0000o`03 0000002Z_000Z[`001D0Z[`000<000000>JE003VU@003`3VU@000`000000003o0000o`0m0000o`00 ?@000?l00`000000Z[`00:Zl000F0:Zl00030000003j/@00n[4002d0n[4000<000000000o`000?l0 _P000?l00`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000l0iYD000<000000000o`000?l0 ?@000?l003h0003o00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za000^0?Za000300000000 0?l0003o0;d0003o00<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000>0>JE000300000000 0?l0003o03d0003o000o0000o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00;P3j/@00 0`000000003o0000o`2m0000o`030000002Z_000Z[`001@0Z[`000<000000>JE003VU@003`3VU@00 0`000000003o0000o`0l0000o`00?`000?l00`000000Z[`00:Zl000F0:Zl00030000003j/@00n[40 02d0n[4000<000000000o`000?l0_@000?l00`000000Z[`00:Zl000E0:Zl00030000003VU@00iYD0 00h0iYD000<000000000o`000?l0?0000?l00400003o00<000000:Zl002Z_0005P2Z_0000`000000 n[400?Za000]0?Za0003000000000?l0003o0;d0003o00<000000:Zl002Z_000502Z_0000`000000 iYD00>JE000?0>JE0003000000000?l0003o03/0003o00110000o`030000002Z_000Z[`001D0Z[`0 00<000000?Za003j/@00;P3j/@000`000000003o0000o`2l0000o`030000002Z_000Z[`001D0Z[`0 00<000000>JE003VU@003P3VU@000`000000003o0000o`0k0000o`00@P000?l00`000000Z[`00:Zl 000E0:Zl00030000003j/@00n[4002d0n[4000<000000000o`000?l0_@000?l00`000000Z[`00:Zl 000D0:Zl00030000003VU@00iYD000l0iYD000<000000000o`000?l0>P000?l00480003o00<00000 0:Zl002Z_0005P2Z_0000`000000n[400?Za000]0?Za0003000000000?l0003o0;`0003o00<00000 0:Zl002Z_0005@2Z_0000`000000iYD00>JE000>0>JE0003000000000?l0003o03X0003o00130000 o`030000002Z_000Z[`001H0Z[`000<000000?Za003j/@00;@3j/@000`000000003o0000o`2l0000 o`030000002Z_000Z[`001@0Z[`000<000000>JE003VU@003P3VU@000`000000003o0000o`0j0000 o`00A0000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00n[4002d0n[4000<000000000o`00 0?l0_0000?l00`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000l0iYD000<000000000o`00 0?l0>@000?l004D0003o00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za000]0?Za00030000 00000?l0003o0;`0003o00<000000:Zl002Z_000502Z_0000`000000iYD00>JE000>0>JE00030000 00000?l0003o03T0003o00150000o`030000002Z_000Z[`001H0Z[`000<000000?Za003j/@00;@3j /@000`000000003o0000o`2i0000o`<000005P2Z_0000`000000iYD00>JE000?0>JE000300000000 0?l0003o03P0003o00160000o`030000002Z_000Z[`001H0Z[`000<000000?Za003j/@00;@3j/@00 0`000000003o0000o`2d0000o`@000000P2@C`000`000000Z[`00:Zl000E0:Zl00030000003VU@00 iYD000h0iYD000<000000000o`000?l0>0000?l004L0003o00<000000:Zl002Z_0005@2Z_0000`00 0000n[400?Za000]0?Za0003000000000?l0003o0;00003o10000007091?00030000002Z_000Z[`0 01@0Z[`000<000000>JE003VU@003`3VU@000`000000003o0000o`0g0000o`00B0000?l00`000000 Z[`00:Zl000E0:Zl00030000003j/@00n[4002d0n[4000<000000000o`000?l0[0000?l3000000/0 T4l000<000000:Zl002Z_0005@2Z_0000`000000iYD00>JE000>0>JE0003000000000?l0003o03L0 003o00180000o`030000002Z_000Z[`001H0Z[`000<000000?Za003j/@00;@3j/@000`000000003o 0000o`2W0000o`@000003`2@C`000`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000h0iYD0 00<000000000o`000?l0=`000?l004T0003o00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za 000]0?Za0003000000000?l0003o0:@0003o0`00000C091?00030000002Z_000Z[`001D0Z[`000<0 00000>JE003VU@003@3VU@000`000000003o0000o`0g0000o`00BP000?l00`000000Z[`00:Zl000E 0:Zl00030000003j/@00n[4002d0n[4000<000000000o`000?l0W`000?l4000001L0T4l000<00000 0:Zl002Z_000502Z_0000`000000iYD00>JE000=0>JE0003000000000?l0003o03L0003o001;0000 o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00;@3j/@000`000000003o0000o`2J0000 o`@000006`2@C`000`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000h0iYD000<000000000 o`000?l0=P000?l004/0003o00<000000:Zl002Z_0005P2Z_0000`000000n[400?Za000/0?Za0003 000000000?l0003o09L0003o0`00000P091?00030000002Z_000Z[`001@0Z[`000<000000>JE003V U@003@3VU@000`000000003o0000o`0f0000o`00C0000?l00`000000Z[`00:Zl000E0:Zl00030000 003j/@00n[4002d0n[4000<000000000o`000?l0TP000?l4000002<0T4l000<000000:Zl002Z_000 502Z_0000`000000iYD00>JE000=0>JE0003000000000?l0003o03H0003o001=0000o`030000002Z _000Z[`001D0Z[`000<000000?Za003j/@00;@3j/@000`000000003o0000o`2>0000o`<00000:02@ C`000`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000`0iYD000<000000000o`000?l0=P00 0?l004h0003o00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za000/0?Za0003000000000?l0 003o08X0003o1000000[091?00030000002Z_000Z[`001@0Z[`000<000000>JE003VU@00303VU@00 0`000000003o0000o`0f0000o`00C`000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00n[40 02`0n[4000<000000000o`000?l0Q@000?l400000300T4l000<000000:Zl002Z_000502Z_0000`00 0000iYD00>JE000;0>JE0003000000000?l0003o03H0003o001?0000o`030000002Z_000Z[`001D0 Z[`000<000000?Za003j/@00;@3j/@000`000000003o0000o`210000o`<00000=02@C`000`000000 Z[`00:Zl000D0:Zl00030000003VU@00iYD000`0iYD000<000000000o`000?l0=@000?l00500003o 00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za000/0?Za0003000000000?l0003o07d0003o 1000000h091?00030000002Z_000Z[`001@0Z[`000<000000>JE003VU@002`3VU@000`000000003o 0000o`0e0000o`00D@000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00n[4002`0n[4000<0 00000000o`000?l0N0000?l4000003`0T4l000<000000:Zl002Z_000502Z_0000`000000iYD00>JE 000;0>JE0003000000000?l0003o03D0003o001B0000o`030000002Z_000Z[`001D0Z[`000<00000 0?Za003j/@00;03j/@000`000000003o0000o`1d0000o`<00000@@2@C`000`000000Z[`00:Zl000C 0:Zl00030000003VU@00iYD000/0iYD000<000000000o`000?l0=@000?l00580003o00<000000:Zl 002Z_0005@2Z_0000`000000n[400?Za000]0?Za0003000000000?l0003o06l0003o10000014091? 00030000002Z_000Z[`001@0Z[`000<000000>JE003VU@002P3VU@000`000000003o0000o`0e0000 o`00D`000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00n[4002`0n[4000<000000000o`00 0?l0K0000?l3000004T0T4l000<000000:Zl002Z_0004`2Z_0000`000000iYD00>JE000:0>JE0003 000000000?l0003o03D0003o001D0000o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00 ;03j/@000`000000003o0000o`1W0000o`@00000C02@C`000`000000Z[`00:Zl000D0:Zl00030000 003VU@00iYD000T0iYD000<000000000o`000?l0=@000?l005D0003o00<000000:Zl002Z_0005@2Z _0000`000000n[400?Za000/0?Za0003000000000?l0003o0680003o1000001@091?00030000002Z _000Z[`001@0Z[`000<000000>JE003VU@002P3VU@000`000000003o0000o`0d0000o`00E@000?l0 0`000000Z[`00:Zl000E0:Zl00030000003j/@00n[4002`0n[4000<000000000o`000?l0G`000?l3 000005D0T4l000<000000:Zl002Z_000502Z_0000`000000iYD00>JE00090>JE0003000000000?l0 003o03@0003o001F0000o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00;03j/@000`00 0000003o0000o`1J0000o`@00000F02@C`000`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD0 00T0iYD000<000000000o`000?l0=0000?l005L0003o00<000000:Zl002Z_0005@2Z_0000`000000 n[400?Za000/0?Za0003000000000?l0003o05H0003o0`00001M091?00030000002Z_000Z[`001@0 Z[`000<000000>JE003VU@00203VU@000`000000003o0000o`0d0000o`00F0000?l00`000000Z[`0 0:Zl000E0:Zl00030000003j/@00n[4002/0n[4000<000000000o`000?l0DP000?l400000600T4l0 00<000000:Zl002Z_000502Z_0000`000000iYD00>JE00080>JE0003000000000?l0003o03@0003o 001H0000o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00;03j/@000`000000003o0000 o`1=0000o`@00000I@2@C`000`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000L0iYD000<0 00000000o`000?l0=0000?l005T0003o00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za000/ 0?Za0003000000000?l0003o04T0003o0`00001Y091?00030000002Z_000Z[`001@0Z[`000<00000 0>JE003VU@00203VU@000`000000003o0000o`0c0000o`00FP000?l00`000000Z[`00:Zl000E0:Zl 00030000003j/@00n[4002/0n[4000<000000000o`000?l0A@000?l4000006d0T4l000<000000:Zl 002Z_0004`2Z_0000`000000iYD00>JE00080>JE0003000000000?l0003o03<0003o001K0000o`03 0000002Z_000Z[`001@0Z[`000<000000?Za003j/@00;03j/@000`000000003o0000o`100000o`@0 0000L@2@C`000`000000Z[`00:Zl000D0:Zl00030000003VU@00iYD000L0iYD000<000000000o`00 0?l0<`000?l005/0003o00<000000:Zl002Z_0005@2Z_0000`000000n[400?Za000/0?Za00030000 00000?l0003o03`0003o0`00001f091?00030000002Z_000Z[`001<0Z[`000<000000>JE003VU@00 1`3VU@000`000000003o0000o`0c0000o`00G0000?l00`000000Z[`00:Zl000E0:Zl00030000003j /@00n[4002/0n[4000<000000000o`000?l0>0000?l4000007T0T4l000<000000:Zl002Z_000502Z _0000`000000iYD00>JE00060>JE0003000000000?l0003o03<0003o001M0000o`030000002Z_000 Z[`001D0Z[`000<000000?Za003j/@00:`3j/@000`000000003o0000o`0d0000o`<00000OP2@C`00 0`000000Z[`00:Zl000C0:Zl00030000003VU@00iYD000H0iYD000<000000000o`000?l0<`000?l0 05h0003o00<000000:Zl002Z_000502Z_0000`000000n[400?Za000/0?Za0003000000000?l0003o 02l0003o10000021091?00030000002Z_000Z[`001@0Z[`000<000000>JE003VU@001@3VU@000`00 0000003o0000o`0c0000o`00G`000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4002/0 n[4000<000000000o`000?l0:`000?l4000008H0T4l000<000000:Zl002Z_0004`2Z_0000`000000 iYD00>JE00060>JE0003000000000?l0003o0380003o001O0000o`030000002Z_000Z[`001D0Z[`0 00<000000?Za003j/@00:`3j/@000`000000003o0000o`0W0000o`<00000RP2@C`000`000000Z[`0 0:Zl000D0:Zl00030000003VU@00iYD000D0iYD000<000000000o`000?l0091?00030000002Z_000Z[`001<0Z[`000<000000>JE003VU@001@3VU@000`000000003o0000 o`0b0000o`00H@000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4002`0n[4000<00000 0000o`000?l07P000?l300000980T4l000<000000:Zl002Z_0004`2Z_0000`000000iYD00>JE0005 0>JE0003000000000?l0003o0380003o001R0000o`030000002Z_000Z[`001@0Z[`000<000000?Za 003j/@00:`3j/@000`000000003o0000o`0J0000o`@00000U@2@C`000`000000Z[`00:Zl000D0:Zl 00030000003VU@00iYD000@0iYD000<000000000o`000?l0JE003VU@00103VU@000`000000003o0000o`0b0000o`00 H`000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00n[4002/0n[4000<000000000o`000?l0 4@000?l3000009h0T4l000<000000:Zl002Z_000502Z_0000`000000iYD00>JE00030>JE00030000 00000?l0003o0380003o001T0000o`030000002Z_000Z[`001@0Z[`000<000000?Za003j/@00:`3j /@000`000000003o0000o`0=0000o`@00000XP2@C`000`000000Z[`00:Zl000C0:Zl00030000003V U@00iYD000@0iYD000<000000000o`000?l0<@000?l006D0003o00<000000:Zl002Z_000502Z_000 0`000000n[400?Za000[0?Za0003000000000?l0003o00T0003o0`00002V091?00030000002Z_000 Z[`001@0Z[`000<000000>JE003VU@000`3VU@000`000000003o0000o`0a0000o`00I@000?l00`00 0000Z[`00:Zl000E0:Zl00030000003j/@00n[4002/0n[4000<000000000o`000?l010000?l40000 0:X0T4l000<000000:Zl002Z_0004`2Z_0000`000000iYD00>JE00030>JE0003000000000?l0003o 0340003o001V0000o`030000002Z_000Z[`001D0Z[`000<000000?Za003j/@00:P3j/@000`000000 003o0000o`0400000:h0T4l000<000000:Zl002Z_000502Z_0000`000000iYD00>JE00020>JE0003 000000000?l0003o0340003o001W0000o`030000002Z_000Z[`001@0Z[`000<000000?Za003j/@00 :`3j/@0200000;<0T4l000<000000:Zl002Z_0004`2Z_0000`000000iYD00>JE00020>JE00030000 00000?l0003o0340003o001X0000o`030000002Z_000Z[`001@0Z[`000<000000?Za003j/@00:P3j /@000`000000T4l0091?002b091?00030000002Z_000Z[`001<0Z[`000<000000>JE003VU@000P3V U@000`000000003o0000o`0a0000o`00J0000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00 n[4002T0n[4000<00000091?002@C`00/`2@C`000`000000Z[`00:Zl000C0:Zl00030000003VU@00 iYD00080iYD000<000000000o`000?l0<0000?l006T0003o00<000000:Zl002Z_0005@2Z_0000`00 0000n[400?Za000X0?Za00030000002@C`00T4l00;<0T4l000<000000:Zl002Z_0004`2Z_0000`00 0000iYD00>JE00020>JE0003000000000?l0003o0300003o001Z0000o`030000002Z_000Z[`001@0 Z[`000<000000?Za003j/@00:03j/@000`000000T4l0091?002d091?00030000002Z_000Z[`001<0 Z[`000D000000>JE003VU@00iYD00000000b0000o`00J`000?l00`000000Z[`00:Zl000D0:Zl0003 0000003j/@00n[4002L0n[4000<00000091?002@C`00]02@C`000`000000Z[`00:Zl000C0:Zl0005 0000003VU@00iYD00>JE00000000JE0000000b0000o`00K0000?l00`000000Z[`00:Zl000E0:Zl00030000003j/@00n[4002D0 n[4000<00000091?002@C`00]@2@C`000`000000Z[`00:Zl000C0:Zl00040000003VU@00iYD00000 0380003o001]0000o`030000002Z_000Z[`001@0Z[`000<000000?Za003j/@009@3j/@000`000000 T4l0091?002f091?00030000002Z_000Z[`001<0Z[`000<000000>JE00000000JE0000000a0000o`00KP000?l00`000000Z[`0 0:Zl000E0:Zl00030000003j/@00n[4002<0n[4000<00000091?002@C`00]`2@C`000`000000Z[`0 0:Zl000B0:Zl00040000003VU@00iYD000000340003o001_0000o`030000002Z_000Z[`001@0Z[`0 00<000000?Za003j/@008`3j/@000`000000T4l0091?002f091?00<00000502Z_0000`000000iYD0 0000000a0000o`00L0000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[400280n[4000<0 0000091?002@C`00/P2@C`04000000<0Z[`01000000@0:Zl00030000003VU@0000000340003o001a 0000o`030000002Z_000Z[`001@0Z[`000<000000?Za003j/@008@3j/@000`000000T4l0091?002^ 091?00@000002`2Z_003000000h0Z[`00P00000a0000o`00LP000?l00`000000Z[`00:Zl000D0:Zl 00030000003j/@00n[400200n[4000<00000091?002@C`00ZP2@C`0400000180Z[`01000000:0:Zl 00800000<@000?l00780003o00<000000:Zl002Z_000502Z_0000`000000n[400?Za000O0?Za0003 0000002@C`00T4l00:L0T4l01000000J0:Zl00@000001`2Z_00200000300003o001c0000o`030000 002Z_000Z[`001@0Z[`000<000000?Za003j/@007P3j/@000`000000T4l0091?002S091?00@00000 8P2Z_003000000@0Z[`00P00000`0000o`00M0000?l00`000000Z[`00:Zl000D0:Zl00030000003j /@00n[4001d0n[4000<00000091?002@C`00W`2@C`04000002T0Z[`0100000000`2Z_00000000000 o`0_0000o`00M@000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001`0n[4000<00000 091?002@C`00V`2@C`0400000340Z[`00P00000`0000o`00M@000?l00`000000Z[`00:Zl000D0:Zl 00030000003j/@00n[4001`0n[4000<00000091?002@C`00U`2@C`0400000340Z[`01000000b0000 o`00MP000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001/0n[4000<00000091?002@ C`00T`2@C`0400000340Z[`01000000f0000o`00M`000?l00`000000Z[`00:Zl000D0:Zl00030000 003j/@00n[4001X0n[4000<00000091?002@C`00S`2@C`0400000340Z[`01000000j0000o`00N000 0?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001T0n[4000<00000091?002@C`00R`2@ C`0400000340Z[`01000000n0000o`00N0000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00 n[4001T0n[4000<00000091?002@C`00R02@C`0300000340Z[`0100000120000o`00N@000?l00`00 0000Z[`00:Zl000D0:Zl00030000003j/@00n[4001P0n[4000<00000091?002@C`00Q02@C`040000 0300Z[`0100000160000o`00NP000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001L0 n[4000<00000091?002@C`00P02@C`0400000300Z[`01000001:0000o`00N`000?l00`000000Z[`0 0:Zl000D0:Zl00030000003j/@00n[4001H0n[4000<00000091?002@C`00O02@C`0400000300Z[`0 1000001>0000o`00N`000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001H0n[4000<0 0000091?002@C`00N02@C`0400000300Z[`01000001B0000o`00O0000?l00`000000Z[`00:Zl000D 0:Zl00030000003j/@00n[4001D0n[4000<00000091?002@C`00M02@C`0400000300Z[`01000001F 0000o`00O@000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001@0n[4000<00000091? 002@C`00L02@C`0400000340Z[`00`00001J0000o`00OP000?l00`000000Z[`00:Zl000D0:Zl0003 0000003j/@00n[4001<0n[4000<00000091?002@C`00K02@C`0400000340Z[`01000001M0000o`00 OP000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4001<0n[4000<00000091?002@C`00 J02@C`0400000340Z[`01000001Q0000o`00O`000?l00`000000Z[`00:Zl000D0:Zl00030000003j /@00n[400180n[4000<00000091?002@C`00I02@C`0400000340Z[`01000001U0000o`00P0000?l0 0`000000Z[`00:Zl000D0:Zl00030000003j/@00n[400140n[4000<00000091?002@C`00H02@C`04 00000340Z[`01000001Y0000o`00P@000?l00`000000Z[`00:Zl000C0:Zl00030000003j/@00n[40 0140n[4000<00000091?002@C`00G02@C`0400000340Z[`01000001]0000o`00PP000?l00`000000 Z[`00:Zl000C0:Zl00030000003j/@00n[400100n[4000<00000091?002@C`00F@2@C`0300000340 Z[`01000001a0000o`00PP000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4000l0n[40 00<00000091?002@C`00E@2@C`0400000300Z[`01000001e0000o`00P`000?l00`000000Z[`00:Zl 000D0:Zl00030000003j/@00n[4000h0n[4000<00000091?002@C`00D@2@C`0400000300Z[`01000 001i0000o`00Q0000?l00`000000Z[`00:Zl000C0:Zl00030000003j/@00n[4000h0n[4000<00000 091?002@C`00C@2@C`0400000300Z[`01000001m0000o`00Q@000?l00`000000Z[`00:Zl000C0:Zl 00030000003j/@00n[4000d0n[4000<00000091?002@C`00B@2@C`0400000300Z[`0100000210000 o`00Q@000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4000`0n[4000<00000091?002@ C`00A@2@C`0400000300Z[`0100000250000o`00QP000?l00`000000Z[`00:Zl000D0:Zl00030000 003j/@00n[4000/0n[4000<00000091?002@C`00@@2@C`0400000340Z[`00`0000290000o`00Q`00 0?l00`000000Z[`00:Zl000C0:Zl00030000003j/@00n[4000/0n[4000<00000091?002@C`00?@2@ C`0400000340Z[`01000002<0000o`00R0000?l00`000000Z[`00:Zl000C0:Zl00030000003j/@00 n[4000X0n[4000<00000091?002@C`00>@2@C`0400000340Z[`01000002@0000o`00R0000?l00`00 0000Z[`00:Zl000D0:Zl00030000003j/@00n[4000T0n[4000<00000091?002@C`00=@2@C`040000 0340Z[`01000002D0000o`00R@000?l00`000000Z[`00:Zl000D0:Zl00030000003j/@00n[4000L0 n[4000<00000091?002@C`00<0003o002H0000o`030000002Z_000Z[`000/0Z[`000<000000:Zl002Z_0007@2Z _00400000>H0003o002I0000o`030000002Z_000Z[`000X0Z[`000<000000:Zl002Z_0006@2Z_004 00000>X0003o002J0000o`030000002Z_000Z[`000P0Z[`000<000000:Zl002Z_0005P2Z_0040000 0>h0003o002K0000o`030000002Z_000Z[`000H0Z[`000<000000:Zl002Z_0004`2Z_00400000?80 003o002K0000o`030000002Z_000Z[`000H0Z[`000<000000:Zl002Z_0003`2Z_00400000?H0003o 002L0000o`030000002Z_000Z[`000@0Z[`000<000000:Zl002Z_000302Z_00400000?X0003o002M 0000o`030000002Z_000Z[`00080Z[`000<000000:Zl002Z_0002@2Z_00400000?h0003o002N0000 o`050000002Z_000Z[`00:Zl000000001`2Z_00400000?l0003o0`000?l009h0003o00@000000:Zl 002Z_0000000102Z_00400000?l0003o1`000?l009l0003o00<000000:Zl000000001000003o0000 o`/0003o002P0000o`800000o`000?l?0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na0000o`00o`000?na 0000o`00o`000?na0000o`00\ \>"], ImageRangeCache->{{{0, 431}, {431, 0}} -> {-5.00005*^-06, -5.00005*^-06, 0.00232021, 0.00232021}}]], "Input", ShowSelection->False, Background->RGBColor[0, 0, 1], CellTags->"viewport"], Cell[BoxData[ StyleBox[GridBox[{ { ButtonBox[\(make\ cube\), ButtonFunction:>Function[ {}, CompoundExpression[ dispMesh[ Set[ theMesh, Set[ initMesh, colorCube]]]]], ButtonEvaluator->Automatic], ButtonBox[\(make\ ring\), ButtonFunction:>Function[ {}, CompoundExpression[ dispMesh[ Set[ theMesh, Set[ initMesh, colorRing]]]]], ButtonEvaluator->Automatic], ButtonBox["\[LongLeftArrow]", ButtonFunction:>Function[ {}, CompoundExpression[ Set[ phi, Plus[ phi, Times[ Rational[ 1, 24], Pi]]], dispMesh[ theMesh]]], ButtonEvaluator->Automatic], ButtonBox["\[LongRightArrow]", ButtonFunction:>Function[ {}, CompoundExpression[ Set[ phi, Plus[ phi, Times[ Rational[ -1, 24], Pi]]], dispMesh[ theMesh]]], ButtonEvaluator->Automatic]}, { ButtonBox[\(linear\ subdivision\), ButtonFunction:>Function[ {}, dispMesh[ Set[ theMesh, quadCreaseSub[ theMesh]]]], ButtonEvaluator->Automatic], ButtonBox[\(quad\ average\), ButtonFunction:>Function[ {}, dispMesh[ Set[ theMesh, quadCreaseAverage[ theMesh]]]], ButtonEvaluator->Automatic], ButtonBox["\[UpArrow]", ButtonFunction:>Function[ {}, CompoundExpression[ Set[ psi, Plus[ psi, Times[ Rational[ -1, 24], Pi]]], dispMesh[ theMesh]]], ButtonEvaluator->Automatic], ButtonBox["\[DownArrow]", ButtonFunction:>Function[ {}, CompoundExpression[ Set[ psi, Plus[ psi, Times[ Rational[ 1, 24], Pi]]], dispMesh[ theMesh]]], ButtonEvaluator->Automatic]} }, RowSpacings->2, ColumnSpacings->2, RowLines->True, ColumnLines->True], Background->GrayLevel[0.900008]]], "Input", Active->True], Cell[CellGroupData[{ Cell["Code for creating interactive display", "Subsubsection"], Cell[TextData[{ "The code for the buttons and function ", Cell[BoxData[ \(dispMesh\)]], " needs definitions for the meshes ", Cell[BoxData[ \(colorCube\)]], " and ", Cell[BoxData[ \(colorRing\)]], " and definitions for the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", Cell[BoxData[ \(dimension\)]], ", ", Cell[BoxData[ \(quadCrease\)]], ", and ", Cell[BoxData[ \(quadCreaseAverage\)]], " from section 7.2.4." }], "Text"], Cell[BoxData[{ \(\(phi = \(psi = 0\);\)\), "\[IndentingNewLine]", \(dispMesh[{T_, p_}] := Module[{nb = SelectedNotebook[], \[IndentingNewLine]data = DisplayString[ Insert[Graphics3D[ Table[{\[IndentingNewLine]SurfaceColor[ RGBColor[\(1\/4\) Apply[Plus, p\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket], {4, 5, 6}\[RightDoubleBracket]]]], \ \[IndentingNewLine]Polygon[ p\[LeftDoubleBracket]T\[LeftDoubleBracket] i\[RightDoubleBracket], {1, 2, 3}\[RightDoubleBracket]]}, {i, Length[T]}], Boxed \[Rule] False], \[IndentingNewLine]{ViewPoint \[Rule] 3.0 {Cos[psi] Cos[phi], Cos[psi] Sin[phi], Sin[psi]}, SphericalRegion \[Rule] True}, \(-1\)]]}, \[IndentingNewLine]NotebookFind[ nb, "\", All, CellTags]; \[IndentingNewLine]SelectionMove[nb, All, CellContents]; \[IndentingNewLine]NotebookWrite[nb, Cell[GraphicsData["\", data], "\", ImageSize \[Rule] 432, CellTags \[Rule] "\", ShowSelection \[Rule] False]]; \[IndentingNewLine]SelectionMove[ nb, After, Cell]]\)}], "Input", InitializationCell->True] }, Closed]] }, Open ]] }, Open ]] }, FrontEndVersion->"4.1 for Microsoft Windows", ScreenRectangle->{{0, 1024}, {0, 695}}, AutoGeneratedPackage->None, WindowSize->{1014, 668}, WindowMargins->{{0, Automatic}, {Automatic, 0}}, Magnification->1, StyleDefinitions -> Notebook[{ Cell[CellGroupData[{ Cell["Style Definitions", "Subtitle"], Cell["\<\ Modify the definitions below to change the default appearance of all cells in \ a given style. Make modifications to any definition using commands in the \ Format menu.\ \>", "Text"], Cell[CellGroupData[{ Cell["Style Environment Names", "Section"], Cell[StyleData[All, "Working"], PageWidth->WindowWidth, ScriptMinSize->9], Cell[StyleData[All, "Presentation"], PageWidth->WindowWidth, ScriptMinSize->12, FontSize->16], Cell[StyleData[All, "Condensed"], PageWidth->WindowWidth, CellBracketOptions->{"Margins"->{1, 1}, "Widths"->{0, 5}}, ScriptMinSize->8, FontSize->11], Cell[StyleData[All, "Printout"], PageWidth->PaperWidth, ScriptMinSize->7, FontSize->10, PrivateFontOptions->{"FontType"->"Outline"}] }, Open ]], Cell[CellGroupData[{ Cell["Notebook Options", "Section"], Cell["\<\ The options defined for the style below will be used at the Notebook level.\ \>", "Text"], Cell[StyleData["Notebook"], PageHeaders->{{Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"], Cell[ TextData[ { ValueBox[ "DateLong"]}], "Header"], Cell[ TextData[ {"Chapter ", CounterBox[ "Chapter"]}], "Header"]}, {Cell[ TextData[ {"Chapter ", CounterBox[ "Chapter"]}], "Header"], Cell[ TextData[ { ValueBox[ "DateLong"]}], "Header"], Cell[ TextData[ { CounterBox[ "Page"]}], "PageNumber"]}}, PageHeaderLines->{True, True}, PrintingOptions->{"PrintingMargins"->{{108, 72}, {72, 72}}, "FirstPageHeader"->False, "FacingPages"->True}, CellFrameLabelMargins->6, TextJustification->1, LineSpacing->{2, 0}, StyleMenuListing->None, FontSize->12] }, Open ]], Cell[CellGroupData[{ Cell["Styles for Headings", "Section"], Cell[CellGroupData[{ Cell[StyleData["Title"], ShowCellBracket->False, CellMargins->{{0, 0}, {0, 0}}, PageBreakBelow->False, TextAlignment->Center, CounterIncrements->"Title", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}, { "Subtitle", 0}, {"Chapter", 0}}, FontSize->34, FontColor->GrayLevel[1], Background->RGBColor[0.571389, 0.19675, 0.570504]], Cell[StyleData["Title", "Presentation"], CellMargins->{{0, 0}, {0, 0}}, FontSize->44], Cell[StyleData["Title", "Condensed"], CellMargins->{{0, 0}, {0, 0}}, FontSize->20], Cell[StyleData["Title", "Printout"], CellMargins->{{0, 0}, {0, 0}}, FontSize->24, FontTracking->"Plain", Background->GrayLevel[0]] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Subtitle"], ShowCellBracket->False, CellMargins->{{0, 0}, {0, 0}}, PageBreakBelow->False, TextAlignment->Center, ParagraphIndent->-96, CounterIncrements->"Subtitle", CounterAssignments->{{"Section", 0}, {"Equation", 0}, {"Figure", 0}, { "Chapter", 0}}, FontFamily->"Helvetica", FontSize->18, FontColor->GrayLevel[1], Background->RGBColor[0.2, 0.700008, 0.700008]], Cell[StyleData["Subtitle", "Presentation"], CellMargins->{{0, 0}, {0, 0}}, ParagraphIndent->-157, FontSize->30], Cell[StyleData["Subtitle", "Condensed"], CellMargins->{{0, 0}, {0, 0}}, ParagraphIndent->-78, FontSize->14], Cell[StyleData["Subtitle", "Printout"], CellMargins->{{0, 0}, {0, 0}}, ParagraphIndent->-85, FontSize->16, Background->GrayLevel[0.6]] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Chapter"], CellFrame->False, ShowCellBracket->True, ShowGroupOpenCloseIcon->False, ShowShortBoxForm->False, CellMargins->{{10, 4}, {50, 150}}, CellGroupingRules->{"SectionGrouping", 20}, PageBreakBelow->False, CellFrameLabels->{{Cell[ TextData[ {"Chapter ", CounterBox[ "Chapter"], ": "}]], None}, {None, None}}, CounterIncrements->"Chapter", CounterAssignments->{{"Section", 0}, {"NumberedEquation", 0}, { "NumberedFigure", 0}, {"NumberedTable", 0}, {"Theorem", 0}}, FontFamily->"Helvetica", FontSize->24, FontSlant->"Italic", Background->GrayLevel[1]], Cell[StyleData["Chapter", "Presentation"], CellMargins->{{8, 10}, {40, 20}}, FontSize->24], Cell[StyleData["Chapter", "Condensed"], CellMargins->{{8, 10}, {12, 8}}, FontSize->12], Cell[StyleData["Chapter", "Printout"], CellMargins->{{9, 10}, {50, 10}}, FontSize->14] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Section"], CellFrame->False, CellDingbat->None, CellMargins->{{12, Inherited}, {4, 24}}, CellGroupingRules->{"SectionGrouping", 30}, PageBreakBelow->False, CellFrameMargins->6, CellFrameLabels->{{Cell[ TextData[ { CounterBox[ "Chapter"], ".", CounterBox[ "Section"], " "}]], None}, {None, None}}, CounterIncrements->"Section", CounterAssignments->{{"Subsection", 0}, {"Subsubsection", 0}}, FontFamily->"Helvetica", FontSize->18, FontWeight->"Bold", FontColor->GrayLevel[0]], Cell[StyleData["Section", "Presentation"], CellMargins->{{10, 10}, {8, 32}}, FontSize->24, FontTracking->"Condensed"], Cell[StyleData["Section", "Condensed"], CellMargins->{{8, Inherited}, {2, 12}}, FontSize->12], Cell[StyleData["Section", "Printout"], CellMargins->{{9, 0}, {2, 50}}, FontSize->14, FontTracking->"Plain", FontColor->GrayLevel[0]] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Subsection"], CellMargins->{{12, Inherited}, {8, 20}}, CellGroupingRules->{"SectionGrouping", 40}, PageBreakBelow->False, CellFrameLabels->{{Cell[ TextData[ { CounterBox[ "Chapter"], ".", CounterBox[ "Section"], ".", CounterBox[ "Subsection"], " "}]], None}, {None, None}}, CounterIncrements->"Subsection", CounterAssignments->{{"Subsubsection", 0}}, FontFamily->"Helvetica", FontSize->13, FontWeight->"Bold"], Cell[StyleData["Subsection", "Presentation"], CellMargins->{{11, 10}, {8, 32}}, FontSize->22], Cell[StyleData["Subsection", "Condensed"], CellMargins->{{8, Inherited}, {2, 12}}, FontSize->12], Cell[StyleData["Subsection", "Printout"], CellMargins->{{9, 0}, {4, 40}}, FontSize->12] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Subsubsection"], CellDingbat->"\[FilledSquare]", CellMargins->{{25, Inherited}, {8, 12}}, CellGroupingRules->{"SectionGrouping", 50}, PageBreakBelow->False, CounterIncrements->"Subsubsection", FontFamily->"Times", FontSize->12, FontWeight->"Bold"], Cell[StyleData["Subsubsection", "Presentation"], CellMargins->{{29, 10}, {8, 26}}, FontSize->18], Cell[StyleData["Subsubsection", "Condensed"], CellMargins->{{22, Inherited}, {2, 12}}, FontSize->10], Cell[StyleData["Subsubsection", "Printout"], CellMargins->{{21, 0}, {4, 20}}, FontSize->11] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Styles for Body Text", "Section"], Cell[CellGroupData[{ Cell[StyleData["Text"], CellMargins->{{12, 10}, {5, 5}}, PageBreakWithin->True, TextJustification->1, Hyphenation->True, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 12}, CounterIncrements->"Text", FontFamily->"Times"], Cell[StyleData["Text", "Presentation"], CellMargins->{{13, 10}, {8, 8}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 12}], Cell[StyleData["Text", "Condensed"], CellMargins->{{8, 10}, {4, 4}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 4}], Cell[StyleData["Text", "Printout"], CellMargins->{{9, 0}, {4, 4}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Itemize"], CellDingbat->"\[FilledSmallCircle]", CellMargins->{{36, 10}, {5, 5}}, TextJustification->1, Hyphenation->True, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 12}, CounterIncrements->"Text", FontFamily->"Times"], Cell[StyleData["Itemize", "Presentation"], CellDingbat->"\[FilledSmallCircle]", CellMargins->{{36, 10}, {8, 8}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 12}], Cell[StyleData["Itemize", "Condensed"], CellDingbat->"\[FilledSmallCircle]", CellMargins->{{36, 10}, {4, 4}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 4}], Cell[StyleData["Itemize", "Printout"], CellDingbat->"\[FilledSmallCircle]", CellMargins->{{36, 0}, {4, 4}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["ItemizeFollow"], CellMargins->{{36, 10}, {0, 0}}, TextJustification->1, Hyphenation->True, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 12}, CounterIncrements->"Text", FontFamily->"Times"], Cell[StyleData["ItemizeFollow", "Presentation"], CellMargins->{{36, 10}, {0, 0}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 12}], Cell[StyleData["ItemizeFollow", "Condensed"], CellMargins->{{36, 10}, {0, 0}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 4}], Cell[StyleData["ItemizeFollow", "Printout"], CellMargins->{{36, 0}, {0, 0}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["SmallText"], CellMargins->{{12, 10}, {5, 5}}, TextJustification->1, Hyphenation->True, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, ParagraphSpacing->{0, 6}, CounterIncrements->"SmallText", FontFamily->"Helvetica", FontSize->9], Cell[StyleData["SmallText", "Presentation"], CellMargins->{{13, 10}, {8, 8}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, FontSize->12], Cell[StyleData["SmallText", "Condensed"], CellMargins->{{8, 10}, {2, 2}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, FontSize->9], Cell[StyleData["SmallText", "Printout"], CellMargins->{{9, 0}, {4, 4}}, TextJustification->1, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, FontSize->7] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Styles for Input/Output", "Section"], Cell["\<\ The cells in this section define styles used for input and output to the \ kernel. Be careful when modifying, renaming, or removing these styles, \ because the front end associates special meanings with these style names.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Input"], CellMargins->{{52, 10}, {8, 8}}, Evaluatable->True, CellGroupingRules->"InputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, CellLabelMargins->{{5, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultInputFormatType, FormatType->InputForm, ShowStringCharacters->True, NumberMarks->True, CounterIncrements->"Input", FontWeight->"Bold", FontColor->GrayLevel[0], Background->RGBColor[0.500008, 1, 0.500008]], Cell[StyleData["Input", "Presentation"], CellMargins->{{62, Inherited}, {10, 10}}], Cell[StyleData["Input", "Condensed"], CellMargins->{{40, 10}, {4, 4}}], Cell[StyleData["Input", "Printout"], CellFrame->True, CellMargins->{{44, 0}, {6, 6}}, Background->None] }, Open ]], Cell[StyleData["InlineInput"], CellFrame->True, Evaluatable->True, CellGroupingRules->"InputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, DefaultFormatType->DefaultInputFormatType, AutoItalicWords->{}, FormatType->InputForm, ShowStringCharacters->True, NumberMarks->True, CounterIncrements->"Input", FontWeight->"Bold", Background->GrayLevel[0.849989]], Cell[CellGroupData[{ Cell[StyleData["Output"], CellMargins->{{52, 10}, {8, 8}}, CellEditDuplicate->True, CellGroupingRules->"OutputGrouping", CellHorizontalScrolling->True, PageBreakWithin->False, GroupPageBreakWithin->False, GeneratedCell->True, CellAutoOverwrite->True, CellLabelMargins->{{3, Inherited}, {Inherited, Inherited}}, DefaultFormatType->DefaultOutputFormatType, FormatType->InputForm, CounterIncrements->"Output", Background->RGBColor[1, 1, 0.300008]], Cell[StyleData["Output", "Presentation"], CellMargins->{{62, Inherited}, {12, 5}}], Cell[StyleData["Output", "Condensed"], CellMargins->{{40, Inherited}, {4, 1}}], Cell[StyleData["Output", "Printout"], CellFrame->True, CellMargins->{{44, 0}, {6, 2}}, Background->None] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Unique Styles", "Section"], Cell[CellGroupData[{ Cell[StyleData["Author"], ShowCellBracket->False, CellMargins->{{10, 4}, {2, 10}}, TextAlignment->Center, FontSize->16, FontSlant->"Italic"], Cell[StyleData["Author", "Presentation"], CellMargins->{{12, 10}, {2, 12}}, ParagraphSpacing->{0, 12}, FontSize->20], Cell[StyleData["Author", "Condensed"], CellMargins->{{8, 10}, {1, 4}}, ParagraphSpacing->{0, 4}, FontSize->12], Cell[StyleData["Author", "Printout"], CellMargins->{{9, 0}, {4, 12}}, ParagraphSpacing->{0, 6}, FontSize->14] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Copyright"], ShowCellBracket->False, CellMargins->{{10, 10}, {40, 2}}, FontFamily->"Helvetica", FontSize->9], Cell[StyleData["Copyright", "Presentation"], CellMargins->{{12, 10}, {50, 2}}, FontSize->12], Cell[StyleData["Copyright", "Condensed"], CellMargins->{{8, 10}, {12, 1}}, FontSize->9], Cell[StyleData["Copyright", "Printout"], CellMargins->{{9, 0}, {72, 4}}, FontSize->7] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Styles for Equations, Figures, Theorems etc.", "Section"], Cell["\<\ The following styles are useful for numbered equations, figures, etc. They \ automatically give the cell a FrameLabel containing a reference to a \ particular counter, and also increment that counter.\ \>", "Text"], Cell[StyleData["Reference"], CellFrame->False, PageBreakWithin->False, GroupPageBreakWithin->False, CellFrameLabels->{{Cell[ TextData[ {"[", CounterBox[ "Reference"], "] "}]], None}, {None, None}}, ShowStringCharacters->True, CounterIncrements->"Reference"], Cell[CellGroupData[{ Cell[StyleData["Example"], CellMargins->{{12, 10}, {5, 12}}, PageBreakBelow->False, ParagraphSpacing->{0, 12}, CounterIncrements->"Example", FontFamily->"Times", FontWeight->"Bold"], Cell[StyleData["Example", "Presentation"], CellMargins->{{18, 10}, {8, 20}}, ParagraphSpacing->{0, 12}], Cell[StyleData["Example", "Condensed"], CellMargins->{{8, 10}, {4, 8}}, ParagraphSpacing->{0, 4}], Cell[StyleData["Example", "Printout"], CellMargins->{{9, 0}, {4, 10}}, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["ExampleCode"], CellMargins->{{24, 10}, {0, 10}}, PageBreakBelow->False, DefaultNewCellStyle->"ExampleCodeExplanation", ParagraphSpacing->{0, 12}, CounterIncrements->"Example", FontFamily->"Times", FontWeight->"Plain", FontColor->RGBColor[0, 0, 0.996109]], Cell[StyleData["ExampleCode", "Presentation"], CellMargins->{{18, 10}, {8, 10}}, ParagraphSpacing->{0, 12}], Cell[StyleData["ExampleCode", "Condensed"], CellMargins->{{8, 10}, {4, 10}}, ParagraphSpacing->{0, 4}], Cell[StyleData["ExampleCode", "Printout"], CellMargins->{{9, 0}, {0, 10}}, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["ExampleCodeExplanation"], CellMargins->{{24, 10}, {10, 0}}, PageBreakAbove->False, DefaultNewCellStyle->"ExampleCode", ParagraphSpacing->{0, 12}, CounterIncrements->"Example", FontFamily->"Times", FontWeight->"Plain", FontColor->GrayLevel[0.749996]], Cell[StyleData["ExampleCodeExplanation", "Presentation"], CellMargins->{{18, 10}, {8, 20}}, PageBreakAbove->False, ParagraphSpacing->{0, 12}], Cell[StyleData["ExampleCodeExplanation", "Condensed"], CellMargins->{{8, 10}, {4, 8}}, PageBreakAbove->False, ParagraphSpacing->{0, 4}], Cell[StyleData["ExampleCodeExplanation", "Printout"], CellMargins->{{9, 0}, {4, 0}}, PageBreakAbove->False, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Proof"], CellFrame->False, CellMargins->{{52, 10}, {0, 0}}, PageBreakWithin->False, PageBreakBelow->False, GroupPageBreakWithin->False, CellLabelMargins->{{23, Inherited}, {Inherited, Inherited}}, CellFrameLabels->{{Cell[ TextData[ {"Proof "}]], None}, {None, None}}, ShowStringCharacters->True, CounterIncrements->"Proof", FontFamily->"Helvetica", FontWeight->"Bold", FontColor->RGBColor[0.2, 0.700008, 0.700008], Background->None], Cell[StyleData["Proof", "Presentation"], CellMargins->{{62, Inherited}, {0, 0}}, PageBreakBelow->False], Cell[StyleData["Proof", "Condensed"], CellMargins->{{40, 10}, {0, 0}}, PageBreakBelow->False], Cell[StyleData["Proof", "Printout"], CellMargins->{{44, 0}, {0, 0}}, PageBreakBelow->False] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Theorem"], CellFrame->False, CellMargins->{{52, 10}, {0, 0}}, PageBreakWithin->False, PageBreakBelow->False, GroupPageBreakWithin->False, CellLabelMargins->{{23, Inherited}, {Inherited, Inherited}}, CellFrameLabels->{{Cell[ TextData[ {"Theorem ", CounterBox[ "Chapter"], ".", CounterBox[ "Theorem"], " "}]], None}, {None, None}}, ShowStringCharacters->True, CounterIncrements->"Theorem", FontFamily->"Helvetica", FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504], Background->None], Cell[StyleData["Theorem", "Presentation"], CellMargins->{{62, Inherited}, {0, 0}}, PageBreakBelow->False], Cell[StyleData["Theorem", "Condensed"], CellMargins->{{40, 10}, {0, 0}}, PageBreakBelow->False], Cell[StyleData["Theorem", "Printout"], CellMargins->{{44, 0}, {0, 0}}, PageBreakBelow->False] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Exercise"], CellDingbat->"\[FilledDownTriangle]", CellMargins->{{23, Inherited}, {4, 18}}, CellGroupingRules->{"SectionGrouping", 50}, PageBreakBelow->False, CounterIncrements->"Subsubsection", FontFamily->"Times", FontSize->13, FontWeight->"Bold", FontColor->RGBColor[0.571389, 0.19675, 0.570504], Background->None], Cell[StyleData["Exercise", "Presentation"], CellMargins->{{33, 10}, {8, 26}}, FontSize->18], Cell[StyleData["Exercise", "Condensed"], CellMargins->{{17, Inherited}, {2, 12}}, FontSize->10], Cell[StyleData["Exercise", "Printout"], CellFrame->{{0, 0}, {0.5, 0}}, CellDingbat->None, CellMargins->{{9, 0}, {6, 20}}, FontSize->11, FontColor->GrayLevel[0]] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["TheoremProofText"], CellMargins->{{52, 10}, {5, 5}}, TextJustification->1, ParagraphSpacing->{0, 12}, CounterIncrements->"Text", FontFamily->"Times"], Cell[StyleData["TheoremProofText", "Presentation"], CellMargins->{{52, 10}, {8, 8}}, TextJustification->1, ParagraphSpacing->{0, 12}], Cell[StyleData["TheoremProofText", "Condensed"], CellMargins->{{8, 10}, {4, 4}}, TextJustification->1, ParagraphSpacing->{0, 4}], Cell[StyleData["TheoremProofText", "Printout"], CellMargins->{{52, 0}, {4, 4}}, TextJustification->1, ParagraphSpacing->{0, 6}] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["NumberedEquation"], CellMargins->{{62, 10}, {Inherited, Inherited}}, CellFrameLabels->{{None, Cell[ TextData[ {"(", CounterBox[ "Chapter"], ".", CounterBox[ "NumberedEquation"], ")"}]]}, {None, None}}, DefaultFormatType->DefaultInputFormatType, TextAlignment->Center, CounterIncrements->"NumberedEquation", FormatTypeAutoConvert->False], Cell[StyleData["NumberedEquation", "Presentation"], CellMargins->{{74, 10}, {Inherited, Inherited}}], Cell[StyleData["NumberedEquation", "Condensed"], CellMargins->{{52, 10}, {Inherited, Inherited}}], Cell[StyleData["NumberedEquation", "Printout"], CellMargins->{{54, 0}, {Inherited, Inherited}}] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["Equation"], CellMargins->{{62, 10}, {Inherited, Inherited}}, DefaultFormatType->DefaultInputFormatType, TextAlignment->Center, FormatTypeAutoConvert->False], Cell[StyleData["Equation", "Presentation"], CellMargins->{{74, 10}, {Inherited, Inherited}}], Cell[StyleData["Equation", "Condensed"], CellMargins->{{52, 10}, {Inherited, Inherited}}], Cell[StyleData["Equation", "Printout"], CellMargins->{{54, 0}, {Inherited, Inherited}}] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["NumberedFigure"], CellMargins->{{0, 0}, {0, 24}}, CellFrameLabels->{{None, None}, {Cell[ TextData[ {"Figure ", CounterBox[ "Chapter"], ".", CounterBox[ "NumberedFigure"]}]], None}}, TextAlignment->Center, CounterIncrements->"NumberedFigure", FormatTypeAutoConvert->False], Cell[StyleData["NumberedFigure", "Presentation"]], Cell[StyleData["NumberedFigure", "Condensed"]], Cell[StyleData["NumberedFigure", "Printout"]] }, Open ]], Cell[CellGroupData[{ Cell[StyleData["Caption"], CellMargins->{{72, 72}, {24, 0}}, PageBreakAbove->False, PageBreakWithin->False, TextAlignment->Center, Hyphenation->True, HyphenationOptions->{"HyphenationCharacter"->"\[Hyphen]"}, FontSlant->"Italic"], Cell[StyleData["Caption", "Presentation"]], Cell[StyleData["Caption", "Condensed"]], Cell[StyleData["Caption", "Printout"]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Styles for Headers and Footers", "Section"], Cell[StyleData["Header"], CellMargins->{{0, 0}, {4, 1}}, StyleMenuListing->None, FontFamily->"Helvetica", FontSize->9, FontSlant->"Italic"], Cell[StyleData["Footer"], CellMargins->{{0, 0}, {0, 4}}, StyleMenuListing->None, FontFamily->"Helvetica", FontSize->6], Cell[StyleData["PageNumber"], CellMargins->{{0, 0}, {4, 1}}, StyleMenuListing->None, FontFamily->"Helvetica", FontSize->9, FontWeight->"Bold"] }, Open ]], Cell[CellGroupData[{ Cell["Hyperlink Styles", "Section"], Cell["\<\ The cells below define styles useful for making hypertext ButtonBoxes. The \ \"Hyperlink\" style is for links within the same Notebook, or between \ Notebooks.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["Hyperlink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`NotebookLocate[ #2]}]&), Active->True, ButtonFrame->"None", ButtonNote->ButtonData}], Cell[StyleData["Hyperlink", "Presentation"]], Cell[StyleData["Hyperlink", "Condensed"]], Cell[StyleData["Hyperlink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell["\<\ The following styles are for linking automatically to the on-line help \ system.\ \>", "Text"], Cell[CellGroupData[{ Cell[StyleData["MainBookLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "MainBook", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["MainBookLink", "Presentation"]], Cell[StyleData["MainBookLink", "Condensed"]], Cell[StyleData["MainBookLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["AddOnsLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontFamily->"Courier", FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "AddOns", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["AddOnsLink", "Presentation"]], Cell[StyleData["AddOnsLink", "Condensed"]], Cell[StyleData["AddOnLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["RefGuideLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontFamily->"Courier", FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "RefGuideLink", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["RefGuideLink", "Presentation"]], Cell[StyleData["RefGuideLink", "Condensed"]], Cell[StyleData["RefGuideLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["GettingStartedLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "GettingStarted", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["GettingStartedLink", "Presentation"]], Cell[StyleData["GettingStartedLink", "Condensed"]], Cell[StyleData["GettingStartedLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]], Cell[CellGroupData[{ Cell[StyleData["OtherInformationLink"], StyleMenuListing->None, ButtonStyleMenuListing->Automatic, FontColor->GrayLevel[1], Background->RGBColor[1, 0.4, 0], ButtonBoxOptions->{ButtonFunction:>(FrontEndExecute[ { FrontEnd`HelpBrowserLookup[ "OtherInformation", #]}]&), Active->True, ButtonFrame->"None"}], Cell[StyleData["OtherInformationLink", "Presentation"]], Cell[StyleData["OtherInformationLink", "Condensed"]], Cell[StyleData["OtherInformationLink", "Printout"], FontColor->GrayLevel[0], Background->GrayLevel[1]] }, Closed]] }, Open ]] }, Open ]] }] ] (******************************************************************* 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->{ "CHA polyhedral"->{ Cell[1727, 52, 128, 2, 272, "Chapter", CounterAssignments->{{"Chapter", 6}}, CellTags->"CHA polyhedral"]}, "EQ check roots"->{ Cell[4302, 113, 583, 12, 110, "Input", InitializationCell->True, CellTags->"EQ check roots"]}, "EQ difference scheme"->{ Cell[4910, 129, 2285, 42, 339, "Input", InitializationCell->True, CellTags->"EQ difference scheme"]}, "FIG oct and cube"->{ Cell[12209, 300, 126, 3, 50, "Input", CellTags->"FIG oct and cube"]}, "FIG oct and cube three rounds"->{ Cell[33057, 757, 190, 4, 50, "Input", CellTags->"FIG oct and cube three rounds"]}, "FIG Topological subdivision"->{ Cell[35526, 822, 283, 6, 70, "Input", CellTags->"FIG Topological subdivision"]}, "FIG 4-8 subdivision"->{ Cell[36025, 840, 1306, 25, 290, "Input", CellTags->"FIG 4-8 subdivision"]}, "FIG two rounds of cube subdivision"->{ Cell[40454, 964, 871, 16, 150, "Input", CellTags->"FIG two rounds of cube subdivision"]}, "FIG doughnut"->{ Cell[41584, 993, 867, 15, 130, "Input", CellTags->"FIG doughnut"]}, "SUBSEC catmull clark matrix update"->{ Cell[43622, 1045, 117, 1, 51, "Subsubsection", CellTags->"SUBSEC catmull clark matrix update"]}, "FIG comparison of quad cubes"->{ Cell[47306, 1124, 285, 6, 70, "Input", CellTags->"FIG comparison of quad cubes"]}, "FIG quad face/edge rules"->{ Cell[48503, 1159, 1432, 25, 263, "Input", CellTags->"FIG quad face/edge rules"]}, "FIG quad rules"->{ Cell[50110, 1194, 1153, 18, 203, "Input", CellTags->"FIG quad rules"]}, "FIG weighted centroids"->{ Cell[52051, 1241, 1552, 27, 411, "Input", CellTags->"FIG weighted centroids"]}, "FIG pole"->{ Cell[55911, 1329, 146, 3, 50, "Input", CellTags->"FIG pole"]}, "SEC creases"->{ Cell[56251, 1344, 96, 1, 60, "Subsection", CellTags->"SEC creases"]}, "FIG bilinear subdivision plus averaging"->{ Cell[69138, 1620, 306, 6, 90, "Input", CellTags->"FIG bilinear subdivision plus averaging"], Cell[69619, 1636, 672, 13, 130, "Input", CellTags->{ "FIG bilinear subdivision plus averaging", "Fig: Tensor product cubic B-spline"}]}, "Fig: Tensor product cubic B-spline"->{ Cell[69619, 1636, 672, 13, 130, "Input", CellTags->{ "FIG bilinear subdivision plus averaging", "Fig: Tensor product cubic B-spline"}]}, "FIG butterfly"->{ Cell[74388, 1762, 1189, 20, 244, "Input", CellTags->"FIG butterfly"]}, "SUBSEC smooth triangular"->{ Cell[75872, 1799, 104, 1, 60, "Subsection", CellTags->"SUBSEC smooth triangular"]}, "Fig: 3 rounds of linear subdivision plus triangle smoothing"->{ Cell[78115, 1858, 813, 14, 130, "Input", CellTags-> "Fig: 3 rounds of linear subdivision plus triangle smoothing"]}, "FIG stellated octahedron example"->{ Cell[79103, 1882, 752, 12, 170, "Input", CellTags->"FIG stellated octahedron example"]}, "FIG tri vertex rules"->{ Cell[80540, 1923, 1054, 18, 249, "Input", CellTags->"FIG tri vertex rules"]}, "FIG averaging versus Loop"->{ Cell[84676, 2015, 287, 6, 70, "Input", CellTags->"FIG averaging versus Loop"]}, "FIG face-splitting subdivisions"->{ Cell[85431, 2046, 2778, 49, 808, "Input", CellTags->"FIG face-splitting subdivisions"]}, "FIG interpolatory face-split rules"->{ Cell[88489, 2110, 1429, 23, 236, "Input", CellTags->"FIG interpolatory face-split rules"]}, "SUBSEC face splitting quad analysis"->{ Cell[90105, 2144, 151, 3, 43, "Subsubsection", CellTags->"SUBSEC face splitting quad analysis"]}, "FIG dual meshes"->{ Cell[103891, 2403, 3047, 54, 868, "Input", CellTags->"FIG dual meshes"]}, "FIG dual quad subdivision"->{ Cell[107113, 2467, 1795, 32, 430, "Input", CellTags->"FIG dual quad subdivision"]}, "viewport"->{ Cell[112785, 2588, 49981, 803, 470, "Input", CellTags->"viewport"]} } *) (*CellTagsIndex CellTagsIndex->{ {"CHA polyhedral", 196400, 4542}, {"EQ check roots", 196545, 4546}, {"EQ difference scheme", 196684, 4550}, {"FIG oct and cube", 196826, 4554}, {"FIG oct and cube three rounds", 196943, 4557}, {"FIG Topological subdivision", 197071, 4560}, {"FIG 4-8 subdivision", 197189, 4563}, {"FIG two rounds of cube subdivision", 197317, 4566}, {"FIG doughnut", 197437, 4569}, {"SUBSEC catmull clark matrix update", 197557, 4572}, {"FIG comparison of quad cubes", 197700, 4575}, {"FIG quad face/edge rules", 197825, 4578}, {"FIG quad rules", 197939, 4581}, {"FIG weighted centroids", 198051, 4584}, {"FIG pole", 198157, 4587}, {"SEC creases", 198249, 4590}, {"FIG bilinear subdivision plus averaging", 198376, 4593}, {"Fig: Tensor product cubic B-spline", 198683, 4600}, {"FIG butterfly", 198866, 4605}, {"SUBSEC smooth triangular", 198979, 4608}, {"Fig: 3 rounds of linear subdivision plus triangle smoothing", 199140, \ 4611}, {"FIG stellated octahedron example", 199313, 4615}, {"FIG tri vertex rules", 199440, 4618}, {"FIG averaging versus Loop", 199561, 4621}, {"FIG face-splitting subdivisions", 199690, 4624}, {"FIG interpolatory face-split rules", 199831, 4627}, {"SUBSEC face splitting quad analysis", 199976, 4630}, {"FIG dual meshes", 200107, 4633}, {"FIG dual quad subdivision", 200224, 4636}, {"viewport", 200334, 4639} } *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1727, 52, 128, 2, 272, "Chapter", CounterAssignments->{{"Chapter", 6}}, CellTags->"CHA polyhedral"], Cell[1858, 56, 434, 12, 72, "Text"], Cell[2295, 70, 369, 6, 72, "Text"], Cell[2667, 78, 561, 10, 103, "Text"], Cell[CellGroupData[{ Cell[3253, 92, 64, 0, 51, "Subsubsection"], Cell[3320, 94, 979, 17, 150, "Input", InitializationCell->True], Cell[4302, 113, 583, 12, 110, "Input", InitializationCell->True, CellTags->"EQ check roots"], Cell[CellGroupData[{ Cell[4910, 129, 2285, 42, 339, "Input", InitializationCell->True, CellTags->"EQ difference scheme"], Cell[7198, 173, 183, 3, 24, "Message"] }, Open ]], Cell[7396, 179, 881, 18, 142, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[8314, 202, 62, 0, 51, "Section"], Cell[CellGroupData[{ Cell[8401, 206, 39, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[8465, 210, 84, 1, 51, "Subsubsection"], Cell[8552, 213, 302, 12, 41, "Text"], Cell[8857, 227, 797, 13, 170, "Input", InitializationCell->True], Cell[9657, 242, 67, 0, 41, "Text"], Cell[9727, 244, 950, 15, 210, "Input", InitializationCell->True], Cell[10680, 261, 70, 0, 41, "Text"], Cell[10753, 263, 841, 13, 150, "Input", InitializationCell->True], Cell[11597, 278, 192, 9, 41, "Text"], Cell[11792, 289, 392, 7, 90, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[12209, 300, 126, 3, 50, "Input", CellTags->"FIG oct and cube"], Cell[12338, 305, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[12522, 314, 63, 0, 43, "Subsubsection"], Cell[12588, 316, 587, 17, 103, "Text"], Cell[13178, 335, 6065, 91, 750, "Input", InitializationCell->True], Cell[19246, 428, 237, 6, 41, "Text"], Cell[19486, 436, 868, 18, 206, "Input", InitializationCell->True], Cell[20357, 456, 24, 0, 41, "Text"], Cell[CellGroupData[{ Cell[20406, 460, 183, 3, 90, "Input"], Cell[20592, 465, 132, 3, 49, "Output"], Cell[20727, 470, 132, 3, 49, "Output"], Cell[20862, 475, 132, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[21043, 484, 66, 0, 43, "Subsubsection"], Cell[21112, 486, 263, 6, 72, "Text"], Cell[21378, 494, 403, 8, 70, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[21806, 506, 58, 1, 50, "Input"], Cell[21867, 509, 132, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[22060, 519, 66, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[22151, 523, 78, 0, 51, "Subsubsection"], Cell[22232, 525, 324, 10, 72, "Text"], Cell[22559, 537, 580, 11, 190, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[23176, 553, 65, 0, 43, "Subsubsection"], Cell[23244, 555, 264, 10, 41, "Text"], Cell[23511, 567, 4890, 86, 850, "Input", InitializationCell->True], Cell[28404, 655, 220, 9, 41, "Text"], Cell[28627, 666, 4218, 77, 730, "Input", InitializationCell->True], Cell[32848, 745, 184, 8, 41, "Text"], Cell[CellGroupData[{ Cell[33057, 757, 190, 4, 50, "Input", CellTags->"FIG oct and cube three rounds"], Cell[33250, 763, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[33434, 772, 57, 0, 43, "Subsubsection"], Cell[33494, 774, 55, 0, 41, "Text"], Cell[33552, 776, 181, 4, 62, "Input", InitializationCell->True], Cell[33736, 782, 313, 7, 62, "Input", InitializationCell->True], Cell[34052, 791, 649, 11, 170, "Input", InitializationCell->True], Cell[34704, 804, 737, 12, 170, "Input", InitializationCell->True], Cell[35444, 818, 57, 0, 41, "Text"], Cell[CellGroupData[{ Cell[35526, 822, 283, 6, 70, "Input", CellTags->"FIG Topological subdivision"], Cell[35812, 830, 135, 3, 49, "Output"] }, Open ]], Cell[35962, 836, 38, 0, 41, "Text"], Cell[CellGroupData[{ Cell[36025, 840, 1306, 25, 290, "Input", CellTags->"FIG 4-8 subdivision"], Cell[37334, 867, 130, 3, 49, "Output"], Cell[37467, 872, 130, 3, 49, "Output"], Cell[37600, 877, 135, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[37808, 888, 53, 0, 71, "Section"], Cell[CellGroupData[{ Cell[37886, 892, 62, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[37973, 896, 101, 4, 51, "Subsubsection"], Cell[38077, 902, 251, 8, 41, "Text"], Cell[38331, 912, 2028, 43, 327, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[40396, 960, 33, 0, 43, "Subsubsection"], Cell[CellGroupData[{ Cell[40454, 964, 871, 16, 150, "Input", CellTags->"FIG two rounds of cube subdivision"], Cell[41328, 982, 135, 3, 49, "Output"] }, Open ]], Cell[41478, 988, 81, 1, 41, "Text"], Cell[CellGroupData[{ Cell[41584, 993, 867, 15, 130, "Input", CellTags->"FIG doughnut"], Cell[42454, 1010, 135, 3, 49, "Output"] }, Open ]], Cell[42604, 1016, 50, 0, 41, "Text"], Cell[CellGroupData[{ Cell[42679, 1020, 668, 9, 130, "Input"], Cell[43350, 1031, 132, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[43543, 1041, 54, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[43622, 1045, 117, 1, 51, "Subsubsection", CellTags->"SUBSEC catmull clark matrix update"], Cell[43742, 1048, 360, 8, 72, "Text"], Cell[44105, 1058, 3176, 62, 342, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[47306, 1124, 285, 6, 70, "Input", CellTags->"FIG comparison of quad cubes"], Cell[47594, 1132, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[47778, 1141, 59, 0, 43, "Subsubsection"], Cell[47840, 1143, 638, 12, 159, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[48503, 1159, 1432, 25, 263, "Input", CellTags->"FIG quad face/edge rules"], Cell[49938, 1186, 135, 3, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[50110, 1194, 1153, 18, 203, "Input", CellTags->"FIG quad rules"], Cell[51266, 1214, 135, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[51462, 1224, 67, 0, 60, "Subsection"], Cell[51532, 1226, 415, 7, 72, "Text"], Cell[CellGroupData[{ Cell[51972, 1237, 54, 0, 51, "Subsubsection"], Cell[CellGroupData[{ Cell[52051, 1241, 1552, 27, 411, "Input", CellTags->"FIG weighted centroids"], Cell[53606, 1270, 130, 3, 49, "Output"] }, Open ]], Cell[53751, 1276, 584, 12, 110, "Input", InitializationCell->True], Cell[54338, 1290, 614, 12, 110, "Input", InitializationCell->True], Cell[54955, 1304, 333, 7, 104, "Input", InitializationCell->True], Cell[55291, 1313, 595, 12, 110, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[55911, 1329, 146, 3, 50, "Input", CellTags->"FIG pole"], Cell[56060, 1334, 130, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[56251, 1344, 96, 1, 60, "Subsection", CellTags->"SEC creases"], Cell[56350, 1347, 539, 10, 103, "Text"], Cell[CellGroupData[{ Cell[56914, 1361, 65, 0, 51, "Subsubsection"], Cell[56982, 1363, 153, 6, 41, "Text"], Cell[57138, 1371, 162, 4, 50, "Input", InitializationCell->True], Cell[57303, 1377, 137, 5, 41, "Text"], Cell[57443, 1384, 8201, 145, 1027, "Input", InitializationCell->True], Cell[65647, 1531, 220, 11, 41, "Text"], Cell[65870, 1544, 2377, 45, 447, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[68284, 1594, 76, 0, 43, "Subsubsection"], Cell[68363, 1596, 197, 6, 41, "Text"], Cell[68563, 1604, 432, 7, 90, "Input", InitializationCell->True], Cell[68998, 1613, 115, 3, 41, "Text"], Cell[CellGroupData[{ Cell[69138, 1620, 306, 6, 90, "Input", CellTags->"FIG bilinear subdivision plus averaging"], Cell[69447, 1628, 135, 3, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[69619, 1636, 672, 13, 130, "Input", CellTags->{ "FIG bilinear subdivision plus averaging", "Fig: Tensor product cubic B-spline"}], Cell[70294, 1651, 135, 3, 49, "Output"] }, Open ]], Cell[70444, 1657, 99, 2, 41, "Text"], Cell[CellGroupData[{ Cell[70568, 1663, 453, 8, 90, "Input"], Cell[71024, 1673, 132, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[71205, 1682, 46, 0, 43, "Subsubsection"], Cell[71254, 1684, 45, 0, 41, "Text"], Cell[CellGroupData[{ Cell[71324, 1688, 887, 15, 130, "Input"], Cell[72214, 1705, 135, 3, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[72386, 1713, 613, 10, 130, "Input"], Cell[73002, 1725, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[73186, 1734, 57, 0, 43, "Subsubsection"], Cell[73246, 1736, 83, 1, 41, "Text"], Cell[73332, 1739, 1031, 19, 90, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[74388, 1762, 1189, 20, 244, "Input", CellTags->"FIG butterfly"], Cell[75580, 1784, 135, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[75788, 1795, 59, 0, 71, "Section"], Cell[CellGroupData[{ Cell[75872, 1799, 104, 1, 60, "Subsection", CellTags->"SUBSEC smooth triangular"], Cell[CellGroupData[{ Cell[76001, 1804, 43, 0, 51, "Subsubsection"], Cell[76047, 1806, 91, 4, 41, "Text"], Cell[76141, 1812, 1949, 42, 307, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[78115, 1858, 813, 14, 130, "Input", CellTags->"Fig: 3 rounds of linear subdivision plus triangle smoothing"], Cell[78931, 1874, 135, 3, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[79103, 1882, 752, 12, 170, "Input", CellTags->"FIG stellated octahedron example"], Cell[79858, 1896, 135, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[80054, 1906, 58, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[80137, 1910, 51, 0, 51, "Subsubsection"], Cell[80191, 1912, 324, 7, 104, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[80540, 1923, 1054, 18, 249, "Input", CellTags->"FIG tri vertex rules"], Cell[81597, 1943, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[81781, 1952, 56, 0, 43, "Subsubsection"], Cell[81840, 1954, 2811, 57, 323, "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[84676, 2015, 287, 6, 70, "Input", CellTags->"FIG averaging versus Loop"], Cell[84966, 2023, 135, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[85174, 2034, 52, 0, 71, "Section"], Cell[CellGroupData[{ Cell[85251, 2038, 52, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[85328, 2042, 78, 0, 51, "Subsubsection"], Cell[CellGroupData[{ Cell[85431, 2046, 2778, 49, 808, "Input", CellTags->"FIG face-splitting subdivisions"], Cell[88212, 2097, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[88396, 2106, 68, 0, 43, "Subsubsection"], Cell[CellGroupData[{ Cell[88489, 2110, 1429, 23, 236, "Input", CellTags->"FIG interpolatory face-split rules"], Cell[89921, 2135, 135, 3, 49, "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[90105, 2144, 151, 3, 43, "Subsubsection", CellTags->"SUBSEC face splitting quad analysis"], Cell[90259, 2149, 435, 13, 72, "Text"], Cell[CellGroupData[{ Cell[90719, 2166, 145, 2, 51, "Input"], Cell[90867, 2170, 46, 1, 49, "Output"] }, Open ]], Cell[90928, 2174, 62, 0, 41, "Text"], Cell[90993, 2176, 457, 7, 130, "Input"], Cell[91453, 2185, 67, 0, 41, "Text"], Cell[91523, 2187, 120, 2, 51, "Input"], Cell[91646, 2191, 96, 2, 41, "Text"], Cell[CellGroupData[{ Cell[91767, 2197, 50, 1, 50, "Input"], Cell[91820, 2200, 38, 1, 49, "Output"] }, Open ]], Cell[91873, 2204, 104, 3, 41, "Text"], Cell[CellGroupData[{ Cell[92002, 2211, 89, 1, 51, "Input"], Cell[92094, 2214, 11081, 149, 1360, "Output"] }, Open ]], Cell[103190, 2366, 371, 14, 41, "Text"], Cell[CellGroupData[{ Cell[103586, 2384, 54, 1, 50, "Input"], Cell[103643, 2387, 53, 1, 49, "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[103757, 2395, 46, 0, 60, "Subsection"], Cell[CellGroupData[{ Cell[103828, 2399, 38, 0, 51, "Subsubsection"], Cell[CellGroupData[{ Cell[103891, 2403, 3047, 54, 868, "Input", CellTags->"FIG dual meshes"], Cell[106941, 2459, 135, 3, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[107113, 2467, 1795, 32, 430, "Input", CellTags->"FIG dual quad subdivision"], Cell[108911, 2501, 135, 3, 49, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[109083, 2509, 3030, 52, 876, "Input"], Cell[112116, 2563, 135, 3, 49, "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[112324, 2574, 75, 0, 71, "Section"], Cell[112402, 2576, 380, 10, 72, "Text"], Cell[112785, 2588, 49981, 803, 470, "Input", CellTags->"viewport"], Cell[162769, 3393, 2754, 72, 81, "Input"], Cell[CellGroupData[{ Cell[165548, 3469, 62, 0, 51, "Subsubsection"], Cell[165613, 3471, 510, 23, 72, "Text"], Cell[166126, 3496, 1515, 27, 269, "Input", InitializationCell->True] }, Closed]] }, Open ]] }, Open ]] } ] *) (******************************************************************* End of Mathematica Notebook file. *******************************************************************)