# [Bf-committers] An easy to use damped spline

Campbell Barton ideasman42 at gmail.com
Sat Dec 27 11:23:22 CET 2014

```Heres an initial port of the PSpline.pas to C,
(single C file, prints 2d curve to stdout).

This is the n-dimensional variant, but for the test it only prints 2d values.

My main concern with this method of calculating splines is it relies
on integer values and bit-shifting. For Blender we would want it to
calculate floating point values, I didnt investigate yet how well this
method could be used with floats, would be interesting to check on
next.

On Mon, Sep 29, 2014 at 3:45 AM, Fred <f.harthoorn at ziggo.nl> wrote:
> Hi Campbell Barton,
>
> The amount of interpolation dots is 2^i, at the start of the demo  i =
> 4    (16 dots)
> if you change i = 7 (the limit in the demo) than there are 128
> interpolation dots.
>
> if I had set the limit in the demo to 10 then 1024 interpolation dots
> was possible.
>
> If the spline is used in a 3 dimensional space,
> to compute an interpolated dot position takes:  dim * 10  clock cycles =
> 30 clock cycles.
> I hope that it is fast enough.
>
> If you like to have a curve to the last plotted dot you have to put two
> dots on each other at the end.
> You will see that it is symmetrical again.
>
> Please change the number to 7 in the demo and you see a curved line in
> stead of dots.
>
> Much more is possible with this spline because the first, second and
> third derivative (parameterized ) of the curve
> is available in real time.
>
> I think that much more can be invented with this spline technique.
> I think that with some research tangent handles can be constructed as
> well (if you like them?).
> What I did in the demo was the most simple way of using it.
>
> The essence is: a 3th degree curve in two (x,y) or more directions is
> differentiated three times, and then again integrated 3 times.
> With floating point this is impossible , because it is not exact, the
> curve runs away.
> But with integer computing it is exact and the spline exact a 3th degree
> curve.
>
> It can also be used in ten or more directions, but more then 3
> dimensions (x,y,z) is not  practical.
>
> Fred.
> --------------------------------------
> Fred schreef op 28-9-2014 om 18:30:
>> That is in the demo the case, because I programmed that  the first plot
>> point is actually two points.
>> the spline uses 4 points p0, p1, p2, p3  and the interpolation is
>> between p1 and p2.
>>
>> Campbell Barton schreef op 28-9-2014 om 17:42:
>>> Checked the test application, and not sure if this is intended but a
>>> simple triangle has uneven distribution.
>>>
>>> see: http://www.graphicall.org/ftp/ideasman42/fred_curve.png
>>>
>>> On Mon, Sep 29, 2014 at 1:32 AM, Dan McGrath <danmcgrath.ca at gmail.com> wrote:
>>>> Cool, got them. Will take a look later. o/
>>>>
>>>> Dan
>>>>
>>>> On Sun, Sep 28, 2014 at 11:28 AM, Fred <f.harthoorn at ziggo.nl> wrote:
>>>>
>>>>> Ok, It is uploaded to the directory incoming
>>>>>
>>>>> Dan schreef op 28-9-2014 om 17:15:
>>>>>> You could always upload it to our anonymous ftp via download.blender.org
>>>>>> (or ftp.blender.org) and put it into the incoming directory (use passive
>>>>>> mode). From there was can fetch the files via
>>>>>>
>>>>>> Dan
>>>>>>
>>>>>> On Sun, Sep 28, 2014 at 11:05 AM, Fred <f.harthoorn at ziggo.nl> wrote:
>>>>>>
>>>>>>> Campbell Barton
>>>>>>>
>>>>>>> I have tried to send it but it is rejected. So send me an addres for
>>>>>>>
>>>>>>> fred
>>>>>>>
>>>>>>>
>>>>>>> Campbell Barton schreef op 28-9-2014 om 16:51:
>>>>>>>> Could the project files be posted to a public URL?, Id like to be able
>>>>>>>> to look into this. but probably wont have time over the coming weeks.
>>>>>>>>
>>>>>>>> The main source file compiles for me with minor edits on
>>>>>>>> Linux/FreePascal, but the demo relies on `Window` unit, which I assume
>>>>>>>> is provided by delphi/windows.
>>>>>>>>
>>>>>>>> On Mon, Sep 29, 2014 at 12:36 AM, Dan McGrath <danmcgrath.ca at gmail.com
>>>>>>> wrote:
>>>>>>>>> Hey,
>>>>>>>>>
>>>>>>>>> Just save out the delphi project and zip it up and email it to me
>>>>> direct
>>>>>>>>> via email I guess (the mailing list wouldn't allow such a large
>>>>>>>>> attachement). I was attempting to compile it on linux, so the compiled
>>>>>>>>> dll's wouldn't be of much use to me unfortunately.
>>>>>>>>>
>>>>>>>>> Thanks!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Dan
>>>>>>>>>
>>>>>>>>> On Sun, Sep 28, 2014 at 10:06 AM, Fred <f.harthoorn at ziggo.nl> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Dan,
>>>>>>>>>>
>>>>>>>>>> Of course I can  send you the project.
>>>>>>>>>> I have made two versions:
>>>>>>>>>> 1) The spline is embedded in de demo:
>>>>>>>>>> 2) The spline is an external .dll, de demo calls PSpline.dll
>>>>>>>>>>
>>>>>>>>>> Which one do you prefer?
>>>>>>>>>>
>>>>>>>>>> Fred.
>>>>>>>>>> ----------------
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Dan McGrath schreef op 28-9-2014 om 15:42:
>>>>>>>>>>> So is/was Turbo Pascal (limited in features; eg: objects but no
>>>>>>> classes)
>>>>>>>>>>> and FreePascal+Lazarus (supports almost everything Delphi does
>>>>> still?
>>>>>>>>>>> http://wiki.freepascal.org/Lazarus_For_Delphi_Users).
>>>>>>>>>>>
>>>>>>>>>>> Anyway, just thought it was neat to see code in pascal (an elegant
>>>>>>>>>>> language, imho). Curious though, why not just give the whole delphi
>>>>>>>>>> project
>>>>>>>>>>> and resource files so your forms can be built etc.? The code seems
>>>>> to
>>>>>>>>>>> compile with some modifications here, but without the {\$R *.DFM}
>>>>>>> (*.lfm
>>>>>>>>>> in
>>>>>>>>>>> fp), one would have to manually rebuild the form :(
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sun, Sep 28, 2014 at 8:55 AM, Fred <f.harthoorn at ziggo.nl> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> It's true, but Delphi is object oriented.
>>>>>>>>>>>>
>>>>>>>>>>>> Dan McGrath schreef op 28-9-2014 om 14:53:
>>>>>>>>>>>>> Standard Pascal, Turbo Pascal, Freepascal, Delphi; same language,
>>>>>>>>>>>> different
>>>>>>>>>>>>> dialect :)
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Sun, Sep 28, 2014 at 8:43 AM, Fred <f.harthoorn at ziggo.nl>
>>>>> wrote:
>>>>>>>>>>>>>> Actually it is Delphi
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Dan McGrath schreef op 28-9-2014 om 14:35:
>>>>>>>>>>>>>>> Pascal, with inline assembler to boot! \o/ :)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Sun, Sep 28, 2014 at 6:46 AM, Ton Roosendaal <
>>>>> ton at blender.org>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Fred told me he's not interested in getting involved, or
>>>>> setting
>>>>>>> up
>>>>>>>>>> a
>>>>>>>>>>>>>>>> project for his work.
>>>>>>>>>>>>>>>> He's retired now and just thought we might be interested in a
>>>>>>>>>> research
>>>>>>>>>>>>>>>> topic he did.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I've copied files he sent to me here;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> It's a Dutch pdf and two pascal files.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> -Ton-
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --------------------------------------------------------
>>>>>>>>>>>>>>>> Ton Roosendaal  -  ton at blender.org   -   www.blender.org
>>>>>>>>>>>>>>>> Chairman Blender Foundation - Producer Blender Institute
>>>>>>>>>>>>>>>> Entrepotdok 57A  -  1018AD Amsterdam  -  The Netherlands
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 28 Sep, 2014, at 9:28, Aditia A. Pratama wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> HI Fred,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Can you record a screencast/video demo to show how it works?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Regards,
>>>>>>>>>>>>>>>>> On Sep 28, 2014 2:14 PM, "Fred" <f.harthoorn at ziggo.nl> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I forgot to say, I have a two dimensional demo but it is
>>>>>>> working
>>>>>>>>>> on
>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>> windows computer.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Jacob Merrill schreef op 28-9-2014 om 02:07:
>>>>>>>>>>>>>>>>>>> would this make it so you can record F-curves over time
>>>>>>> better?
>>>>>>>>>>>>>>>>>>> right now recording in the engine gets slower the longer it
>>>>>>> runs,
>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Bf-committers mailing list
>>>>>>>>>> Bf-committers at blender.org
>>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Bf-committers mailing list
>>>>>>>>> Bf-committers at blender.org
>>>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>> _______________________________________________
>>>>>>> Bf-committers mailing list
>>>>>>> Bf-committers at blender.org
>>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Bf-committers mailing list
>>>>>> Bf-committers at blender.org
>>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>>
>>>>> _______________________________________________
>>>>> Bf-committers mailing list
>>>>> Bf-committers at blender.org
>>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>>>
>>>> _______________________________________________
>>>> Bf-committers mailing list
>>>> Bf-committers at blender.org
>>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>>
>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers

--
- Campbell
```