# Re: Scheper's Catmull-Rom curves, and Spiro curves

From: Dave Crossland <dave@lab6.com>
Date: Wed, 14 Jul 2010 11:47:50 -0400
Message-ID: <AANLkTikVO9HKw6C6AxuM55PH6VDbu8VVGLYgk8pcVM4a@mail.gmail.com>

```Hi,

Responding to the minutes:

On 13 July 2010 22:31, Anthony Grasso <anthony.grasso@cisra.canon.com.au> wrote:
>
> Catmull-Rom curves
> <shepazu> http://schepers.cc/?p=243
>
> DS: If you look at that link. If you compare his spiro curves and mine
> ... his look a lot better
> ... not sure how he does that

But its so simple. Here's http://levien.com/phd/thesis.pdf is 191
pages of Berkeley math PhD thesis to explain! ;p

> ... the advantage of the Cutmull-Rom curve if you just give a set of points
> ... It looks like with Spiro curves points have a different characteristic

Spiro has 5 kinds of points.

> ... I think Font Forge implements up to the 4th order continuity
> ... Inkscape up to the 2nd order

Yes.

> ... with Spiro we can specify it with 3 points. x,y, and magnitude/tension

Yes.

> ... the problem with extending path is it is no longer backwards compatible

I suggest that authoring tools provide fallback Bezier paths for
backwards compatibility; Raph Levien authored excellent optimised
Bezier conversion programs to do this which are GPL as part of the
"ppedit" tool suite. http://levien.com/garden/ppedit/

> ... we need to figure out what the syntax would be
> ... but the larger question is, is this something we are interested in doing
> ED: I don't know how the spiro curves are to hand author, but if they are we should take a good look at them

Raph made a simple s-exp syntax for his ppedit prototype, explained in

- - - - - - 8< - - - - - -
a plate file can be given as a command line argument. The file uses
simple S-expressions, with a one-character code for each point, then
the X and Y coordinates - 0,0 is top left.

Here's the cap U from Inconsolata, for example:

(plate
(v 68 78)
(v 159 78)
(o 158 92)
([ 148 115)
(] 148 552)
(o 298 744)
([ 459 549)
(v 459 78)
(v 536 78)
(] 536 547)
(o 295 813)
([ 68 551)
(z)
)

v: corner
o: g4
c: g2
[: left-facing one-way
]: right-facing one-way
- - - - - - 8< - - - - - -

> DS: We need to talk to Ralph Levien
> ... about using his method
> ... we need to find out if it can be a royalty free algorithm that we can put in SVG
>...
> ED: Do these curves have any license issues related to them?
> DS: I didn't find any problems with their licencing

Raph has a USA software idea patent on Spiro, with a GPL grant,

- - - - - - 8< - - - - - -

== License and patent grant ==

All code in this package is released under the terms of the GNU GPL,
version 2 or later, at your choice.

Further, there is a provisional patent application filed for the
underlying curve technology. The following patent grant applies to any
patent which may be issued as a result of that application:

Whereas, Raph Levien (hereinafter "Inventor") has obtained patent
protection for related technology (hereinafter "Patented Technology"),
Inventor wishes to aid the the GNU free software project in achieving
its goals, and Inventor also wishes to increase public awareness of
Patented Technology, Inventor hereby grants a fully paid up,
nonexclusive, irrevocable, royalty free license to practice the
patents listed below ("the Patents") if and only if practiced in