Re: Uniform arc length basis curve fitting
- To: mathgroup at smc.vnet.net
- Subject: [mg67452] Re: Uniform arc length basis curve fitting
- From: "Dana DeLouis" <ddelouis at bellsouth.net>
- Date: Sun, 25 Jun 2006 03:19:20 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi. I do not know if this will help, but here is a general discussion of finding the arc length of the Cubic Spline example. Needs["NumericalMath`SplineFit`", "Graphics`Spline`"] pts = {{0, 0}, {1, 2}, {-1, 3}, {0, 1}, {3, 0}}; Show[Graphics[Spline[pts, Cubic, SplineDots -> Automatic], GridLines -> {{-1, 0, 1, 2, 3}, {0, 1, 2, 3}}], Axes -> True]; With 5 points, there are 4 intervals as observed in the above graph. A Spline generates a cubic equation for each of the 4 intervals, numbered 0, 1, 2 & 3. Here's that Spline Function... sf = SplineFit[pts, Cubic]; The variables for the cubic Polynomials are the last item (4th) in the SplineFuntion object. sf[[4]] or Last[sf] The valid range of the Spline Function is the Second item... sf[[2]] Here's a function to put the Spline variables into a better form. I will use the variable 't'. SplineEquations[sf_SplineFunction, v_Symbol:t] := Module[{m = Last[sf]}, (#1 . {1, v, v^2, v^3} & ) /@ m] Here's a list of all the Spline Equations: se = SplineEquations[sf] TableForm[se, TableHeadings -> {{0, 1, 2, 3}, {"X", "Y"}}] When you do a plot of a Spline from 0 to 4, the integer portion of the number picks which equation to use, and the fractional part, which runs from 0 to 1, is used to determine the x & y points. For example, a number like 0.5 is taken to mean the following...The 0 is used to select the first equation, and the 0.5 is used as 't above to determine the x & y points. A number like 1.7 is taken to mean "use the second equation, and use 0.7 to determine the x & y points. The number '4 in the valid range is a little different...it just means use equation #3 (the 4th one), but use a value of '1 to determine x & y. (At the end of the interval). We just note item #12 in the following link: http://mathworld.wolfram.com/ArcLength.html Here's a function to return the Arc Length equations: ArcLengthEquation[{x_, y_}, v_Symbol] := Module[{equ}, equ = Norm[D[{x, y}, v]]; Assuming[0 <= v <= 1, Simplify[equ]]] Here's the Arc Length equation of the second interval... ArcLengthEquation[se[[2]], t] (3/56)*Sqrt[1620 + 3672*t + 4952*t^2 - 23172*t^3 + 13565*t^4] The actual Arc Length is calculated from 0 to 1. We note here that the symbolic integral is rather difficult, so that makes calculating x/y points from a given length rather hard. ArcLength[{x_, y_}, v_Symbol] := Module[{equ}, equ = ArcLengthEquation[{x, y}, v]; NIntegrate[equ, {v, 0, 1}]] We Map it onto each of the 4 parametric equations to get each Arc Length: (ArcLength[#1, t] & ) /@ se {2.381081440098988, 2.3750200913641875, 2.4204208569360257, 3.1974584672827886} The total length of the graph is: Total[%] 10.373980855681989 I hope this helps in some way. Dana DeLouis Mathematica 5.2 for Windows