Re: Slow plotting of reflected parametric "butterflies"
- To: mathgroup at smc.vnet.net
- Subject: [mg124495] Re: Slow plotting of reflected parametric "butterflies"
- From: Chris Young <cy56 at comcast.net>
- Date: Sat, 21 Jan 2012 05:20:26 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jf8ql4$3pl$1@smc.vnet.net> <jfb358$hr6$1@smc.vnet.net>
I'm thinking that it's much safer programming style to always isolate any functions using Set (rather than SetDelayed) inside a module; otherwise aren't there "exposed" global variables? If these get assigned some value, wouldn't the function be broken? Below, I put the MSeg[ ] function, which plots segment outwards from its midpoint, into the module used by the Manipulate. Manipulate[ Module[ { \[ScriptCapitalA] = {Ax, Ay, Az}, \[ScriptCapitalB] = {Bx, By, Bz}, \[ScriptCapitalC] = {Cx, Cy, Cz}, \[ScriptCapitalD] = {Dx, Dy, Dz}, \[ScriptCapitalP], \[ScriptCapitalQ], n, k, t }, (* points riding along the "rails" \[ScriptCapitalA]\ \[ScriptCapitalC] and \[ScriptCapitalB]\[ScriptCapitalD]: *) \ \[ScriptCapitalP][n_] = (1 - n) \[ScriptCapitalA] + n \[ScriptCapitalC]; \[ScriptCapitalQ][n_] = (1 - n) \[ScriptCapitalB] + n \[ScriptCapitalD]; \[HorizontalLine]MSeg[\[ScriptCapitalA]_, \[ScriptCapitalB]_, k_, t_] = (\[ScriptCapitalA] + \[ScriptCapitalB])/2 + k (t - 1/2) (\[ScriptCapitalB] - \[ScriptCapitalA]); (* reflections of the "butterfly" across all the coordinate planes *) Show[ ParametricPlot3D[ Table[ ( { {\[ScriptI], 0, 0}, {0, \[ScriptJ], 0}, {0, 0, \[ScriptK]} } ). \[HorizontalLine]MSeg[\[ScriptCapitalP][ u], \[ScriptCapitalQ][u], 2 u - 1, v], {\[ScriptI], {-1, 1}}, {\[ScriptJ], {-1, 1}}, {\[ScriptK], {-1, 1}} ], {u, 0, 1}, {v, 0, 1}, PlotPoints -> plotPts, Mesh -> mesh, MeshStyle -> Tube[tubeR], MeshFunctions -> {{x, y, z, u, v} \[Function] v}, MeshShading -> {Lighter[Blue, .5], Yellow, Orange, Yellow, Lighter[Blue, .5]}, BoundaryStyle -> Tube[tubeR], MaxRecursion -> maxRecurs ], (* the corners of the twisted sheet *) With[{pts = {\[ScriptCapitalA], \[ScriptCapitalB], \ \[ScriptCapitalC], \[ScriptCapitalD]}}, Graphics3D[ {Table[{Hue[(k - 1)/4], Sphere[pts[[k]], ptRad]}, {k, 1, 4}], Gray, Sphere[Plus @@ pts/4, ptRad]}] ], Lighting -> "Neutral", PlotRange -> 4, Axes -> True, AxesLabel -> {"x", "y", "z"} ] ], {{Ax, 0}, -4, 4, .125}, {{Ay, -4}, -4, 4, .125}, {{Az, -4}, -4, 4, .125}, {{Bx, -4}, -4, 4, .125}, {{By, 0}, -4, 4, .125}, {{Bz, -4}, -4, 4, .125}, {{Cx, 0}, -4, 4, .125}, {{Cy, 0}, -4, 4, .125}, {{Cz, -2}, -4, 4, .125}, {{Dx, -4}, -4, 4, .125}, {{Dy, -4}, -4, 4, .125}, {{Dz, 0}, -4, 4, .125}, {{mesh, 4}, 0, 9}, {{tubeR, 0.03}, 0, 0.1, 0.01}, {{plotPts, 6}, 2, 30, 1}, {{maxRecurs, 1}, 0, 4, 1}, {{ptRad, .1}, 0, 0.5, 0.01}, {{tubeR, .03}, 0, 0.5, 0.01} ]