News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

Cublic spline interpolation

Started by Biterider, October 03, 2015, 12:43:34 AM

Previous topic - Next topic

Biterider

Hi
I'm wondering if someone has coded in plain masm a cspline to interplate between an array of (x;y) reals.
I know that there are some examples in the net, but if somebody just did the work, it would save me to do and test it again...

Thanks, Biterider

jj2007

SetPoly3 is almost plain Masm (examples attached):
SetPoly3, GetPoly3
      Dim My3Pts(5) As DWORD            ; create an array with 3 XY pairs, i.e. 6 elements (0 .. 5)
      ArraySet My3Pts() = 1, 100, 2, 300, 4, 150      ; assign XY values (ArraySet can be handy but any other array works, too)
      SetPoly3 My3Pts()            ; create coefficients for a 3-point polynomial, i.e. Y=a0+a1*X+a2*X2
      Dim AllPts(11) As REAL4            ; create a destination array with 12 elements
      Print "N", Tb$, "X", Tb$, "Y", Tb$, "Y(ecx)"      ; the last column uses the "direct" variant GetPoly3(X)
      GetPoly3(AllPts())            ; fill starting from X=0, create coefficients for Y=a0+a1*X+a2*X2
      add eax, eax
      push eax
      xor ecx, ecx
      .Repeat            ; print N, X, Y=f(x), Y=f(2*X)
            Print Str$("\n%i\t", ecx/2), Str$("%2f\t", AllPts(ecx)), Str$("%3f\t", AllPts(ecx+1)), Str$("%3f", GetPoly3(ecx))
            fstp st            ; pop the return value from the FPU
            add ecx, 2
      .Until ecx>=stack
      pop eax
Rem      - GetPoly3() returns #XY pairs in eax
      - GetPoly3(array()) sets the whole destination array
      - GetPoly3(X) returns a single value in ST(0)

guga

Excelent work JJ.

Do you have it n plain masm ? I´m trying to make a closed spline to use as a mask  for bitmap editing. Currently, i´m trying to port  VirtualDub filter and will intend to use a spline to create a mask.
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity
10% of programming skills
10% of alcoholic levels in your blood.

My Code Sites:
http://rosasm.freeforums.org
http://winasm.tripod.com

jj2007

Quote from: guga on July 23, 2016, 10:00:41 PMDo you have it n plain masm ?

SetPoly and GetPoly in \Masm32\MasmBasic\MasmBasic.inc are plain Masm, no call to the lib involved.

FORTRANS

Hi,

   A while back, I wrote a Bezier spline routine for a draw program
to add curved lines.  Inputs are screen coordinates, so are integers.
And the code is 16-bit.  But I wrote four versions to get it accurate,
working, and debugged.  The third did the math using the FPU, to
try and get the accurate results.  Fairly crude and rude but it did work.

   Of any interest?

Regards,

Steve N.