
Re: tubes program not working in version 9
Posted:
Dec 8, 2012 1:28 AM


The code that you posted does not define values for either p0 or q0. However, even with these defined, I obtained radically different surfaces depending on whether the intermediate results are simplified.
$Version
"9.0 for Mac OS X x86 (64bit) (November 20, 2012)"
Clear[p0, q0];
TubePlotFrenet[curve_List, {var_, min_, max_}, radius_, opts___] := Module[{tangent, unitTangent, normal, unitNormal, biNormal}, tangent = D[curve, t]; unitTangent = tangent/Sqrt[tangent.tangent]; normal = D[unitTangent, t]; unitNormal = normal/Sqrt[normal.normal]; biNormal = Cross[unitTangent, unitNormal]; ParametricPlot3D[ curve + radius Cos[s] unitNormal + radius Sin[s] biNormal // Evaluate, {var, min, max}, {s, 0, 2 \[Pi]}, opts]]
TubePlotFrenet2[curve_List, {var_, min_, max_}, radius_, opts___] := Module[{tangent, unitTangent, normal, unitNormal, biNormal}, tangent = D[curve, t] // Simplify; unitTangent = tangent/Sqrt[tangent.tangent] // Simplify; normal = D[unitTangent, t] // Simplify; unitNormal = normal/Sqrt[normal.normal] // Simplify; biNormal = Cross[unitTangent, unitNormal] // Simplify; ParametricPlot3D[ curve + radius Cos[s] unitNormal + radius Sin[s] biNormal // Evaluate, {var, min, max}, {s, 0, 2 \[Pi]}, opts]]
Column[Table[With[{p0 = n, q0 = m}, r = Cos[q0*t] + 2; x = r*Cos[p0*t]; y = r*Sin[p0*t]; z = Sin[q0*t]; w0 = 8*{x, y, z}; Row[{ h1 = TubePlotFrenet[w0, {t, 0, 2 \[Pi]}, 1, Axes > None, Boxed > False, PlotPoints > {64, 16}, ColorFunction > "CandyColors", MeshFunctions > {#3 &}, ImageSize > 228, BoxRatios > {1, 1, 1}, PlotLabel > StringForm[ "h1: p0 = ``, q0 = ``", p0, q0]], h2 = TubePlotFrenet2[w0, {t, 0, 2 \[Pi]}, 1, Axes > None, Boxed > False, PlotPoints > {64, 16}, ColorFunction > "CandyColors", MeshFunctions > {#3 &}, ImageSize > 228, BoxRatios > {1, 1, 1}, PlotLabel > StringForm[ "h2: p0 = ``, q0 = ``", p0, q0]]}]], {n, {1, 1}}, {m, {1, 1}}]]
Bob Hanlon
On Fri, Dec 7, 2012 at 1:39 AM, Roger Bagula <roger.bagula@gmail.com> wrote: > The problem seems to be sometimes it works but mostly it doesn't. > The tubes program was written for an earlier version > ( works in version 5 I think) by Mark McClure > and has worked fine for literally years. > I haven't got a clue what has gone wrong. > ( technically these are called channel surfaces or the like). > > TubePlotFrenet[curve_List, {var_, min_, max_}, radius_, opts___] := > Module[{tangent, unitTangent, normal, unitNormal, biNormal}, > tangent = D[curve, t]; > unitTangent = tangent/Sqrt[tangent.tangent]; > normal = D[unitTangent, t]; > unitNormal = normal/Sqrt[normal.normal]; > biNormal = Cross[unitTangent, unitNormal]; > ParametricPlot3D[ > curve + radius Cos[s] unitNormal + radius Sin[s] biNormal // > Evaluate, {var, min, max}, {s, 0, 2 \[Pi]}, opts]] > > r = Cos[q0*t] + 2; > x = r* Cos[p0*t]; > y = r *Sin[p0*t]; > z = Sin[q0*t]; > w0 = 8*{x, y, z} > h = TubePlotFrenet[w0, {t, 0, 2 \[Pi]}, 1, Axes > None, > Boxed > False, PlotPoints > {64, 16}, > ColorFunction > "CandyColors", MeshFunctions > {#3 &}] > > My other tubes program which came from an answer in this group > still works. >

