Re: fit a tube around a trajectory
- To: mathgroup at smc.vnet.net
- Subject: [mg59221] Re: fit a tube around a trajectory
- From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
- Date: Tue, 2 Aug 2005 00:42:52 -0400 (EDT)
- Organization: Uni Leipzig
- References: <dchoek$84n$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, and none of the references below http://www.cs.indiana.edu/pub/techreports/TR425.pdf http://www.sdsc.edu/~agramada/Tubing.pdf helps ? I have a notebook that draws 3d flow-fishes instead of a tubes -- mail me if you want it. Regards Jens "Georgios Oikonomou" <georgios.oikonomou at gmail.com> schrieb im Newsbeitrag news:dchoek$84n$1 at smc.vnet.net... | Dear forum | below is one of the problems I am trying to solve lately. Actually is | a simplified version of my problem but the structure is the same. So I | am having three trajectories plotted from the program below. Now I | want to fit a tube around the resulted trajectories. I was trying to | use the a package that its code is illustrated below. However it didnt | work and I was trying to change the m.File in order to fit my plots. | Unfortunately without any luck. | | If anyone has a clue how I can short it out it, I would be greatful. I | suspect that the problem has to do with the derivative in the m.file. | | (* .nb file for trajectories*) | (* parameters *) | aa = 1.0; | bb = 2.0; | (* starting points *) | x0 = aa; | y0 = bb; | z0 = 0.0; | (* angular velocity in orbit *) | w = 2.0*Pi; | | cc = 0.5; | c1 = 0.0; | k1 = 0.0; | k2 = k1; | k3 = k1; | (* velocity *) | vx[xx_, yy_, zz_, tt_, c1_, | c2_, c3_, d1_, d2_, d3_] := -aa*Sin[w*tt] + Sin[xx]; | vy[xx_, yy_, zz_, tt_, c1_, c2_, c3_, d1_, d2_, d3_] := bb*Cos[w*tt] + \ | Sin[zz] + Sin[yy]; | vz[xx_, yy_, zz_, tt_, c1_, c2_, c3_, d1_, d2_, d3_] := cc + | Sin[yy] + Exp[-zz]; | | (* solve for trajectory : outputs interpolating function *) | sol0 = NDSolve[ | {x'[t] == N[vx[x[t], y[t], z[t], t, k1, k2, k3, 1, 2, 3]], | y'[t] == N[vy[x[t], y[t], z[t], t, k1, k2, k3, 1, 2, 3]], | z'[t] == N[vz[x[t], y[t], z[t], t, k1, k2, k3, 1, 2, 3]], | x[0] == x0, y[0] == y0, z[0] == z0}, | {x, y, z}, {t, 0, 10}, Method -> ExplicitRungeKutta]; | | (*Plot trajectory in real space *) | pic0 = ParametricPlot3D[Evaluate[{x[t], y[t], z[t]} /. sol0], {t, 0, 5}, \ | PlotRange -> All]; | | | (* do this for three orbits with different starting points *) | (* number of trajectories *) | Ntrajs = 3; | (* initialise a set of initial xx, yy, zz values *) | xxstart = Table[0.0, {jj, 1, Ntrajs}]; | yystart = Table[0.0, {jj, 1, Ntrajs}]; | zzstart = Table[0.0, {jj, 1, Ntrajs}]; | (*Choose initial starting points to lie in x = aa, z = | 0 plane uniformily in range - bb < yy < bb *) | Do[ | xxstart[[jj]] = aa; | yystart[[jj]] = -bb + 2*bb*(jj - 1)/(Ntrajs - 1); | zzstart[[jj]] = 0.0, | {jj, 1, Ntrajs}]; | (*initialise array of trajectories *) | sol = Table[sol0, {jj, 1, Ntrajs}]; | (*initialise graphics array of trajectories *) | pic = Table[pic0, {jj, 1, Ntrajs}]; | (* Do loop to calculate Njtrajs trajectories *) | Do[ | sol[[jj]] = NDSolve[ | {x'[t] == N[vx[x[t], y[t], z[t], t, k1, k2, k3, 1, 2, 3]], | y'[t] == N[vy[x[t], y[t], z[t], t, k1, k2, k3, | 1, 2, 3]], z'[t] == N[vz[x[t], y[t], z[t], t, k1, k2, k3, 1, 2, 3]], | x[0] == xxstart[[jj]], y[0] == yystart[[jj]], z[0] == zzstart[[ | jj]]}, | {x, y, z}, {t, 0, 10}, Method -> ExplicitRungeKutta]; | | | pic[[jj]] = ParametricPlot3D[Evaluate[{x[t], y[t], z[t]} /. sol[[jj]]], { | t, 0, 1}, PlotRange -> All, AspectRatio -> 1], {jj, 1, Ntrajs}]; | | Show[pic[[1]], pic[[2]], pic[[3]]] | | | (*--------------------------------------------*) | | (*Tubes.m file*) | (* code is taken from the web, | http://www.unca.edu/~mcmcclur/mathematicaGraphics/index.html *) | TubePlot[curve_List, {var_, min_, max_}, radius_, | crossVector_List:{1, 1, 1}, opts___] := | Module[{tangent, unitTangent, normal, | unitNormal, biNormal}, | tangent = D[curve, t]; | unitTangent = tangent/Sqrt[tangent.tangent]; | normal = Cross[tangent, crossVector]; | 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, 2Pi}, opts]] | | (*-------Example from the author of Tubes.m-----The Klein Bottle---*) | | d = .00000001; | r = If[-Pi/2 <= t && t <= Pi/2, | (1 - Sqrt[Cos[t]]/2), (1 + Sqrt[-Cos[t]]/2)]; | g = TubePlot[{ 2Cos[t] (1 + Sin[t]), 6 Sin[t], 0}, | {t, -Pi/2 + d, 3Pi/2 - d}, r, {0, 0, 1}, | PlotPoints -> {48, 12}, Axes -> False, Boxed -> False, | LightSources -> {{{1., 0., 1.}, RGBColor[1, 0, 0]}, | {{1., 1., 1.}, RGBColor[0, 1, 0]}, {{0., 1., 1.}, | RGBColor[0, 0, 1]}, {{-1., 0., -1.}, RGBColor[1, 0, 0]}, | {{-1., -1., -1.}, RGBColor[0, 1, 0]}, {{0., -1., -1.}, | RGBColor[0, 0, 1]}}] | | Thanx for your time. | Ragards | Georgios |