Programming in Delphi
Everything you always wanted to know about Splines but never dared to ask
Sober thinking reveals that you can combine sets of straight line segments
with parabolic splines to generate virtually any shape you can dream of, with
any desired accuracy. I simply find arguments that sound otherwise not very convincing.
The incredible fact that higher order splines, nevertheless, have gained much
more attention is due, a great deal, to patents, CopyRights & the like.
In short: misplaced commercial interests rule the roast. Splines have too much
to do with the costly (!) design of
This explains something, but, in my humble opinion, doesn't justify anything.
It is sad to remark that non-mathematical arguments prevail, most of the time.
But, that such a thing can happen even in the area of Pure Mathematics,
is almost unbelievable, to me at last.
The point I want to make here is that there is no need to use Cubic (or whatever higher order)
splines in two dimensions. Because they offer no significant advantage,
when compared with the simplest member of the family: the Quadratic
Convince yourself by reading / running the stuff I have brewed on this subject:
Note: my son said to me that the prevalence of cubic splines is maybe due to
the fact that one can easily build an interactive designing program with the
latter, but not with the former. Well, I must admit that would be a "legal"
consideration, at last.
(*) But .. I've made a mistake with terminology.
The following is a comment by Rob Johnson.
The second order counterpart of cubic splines are quadratic splines, which,
as you have noted in your citations, are parabolic sections.
However, [ your PDF ]
seems to say that quadratic splines and conic splines are the same.
While all quadratic splines are conic splines, not all conic splines are
quadratic. In fact, quadratic splines are the intersection of cubic splines
and conic splines, and proper subsets of both.
Conic splines are rational splines, and as such are closed under not only
affine transformations, but also perspective transformations.
Kind of a Test Facility has been devised for Discrete / Random / Continuous
Densities and Senses. The purpose of it being able to test some theory, and
also getting familiar with the subject as such. A prototype of this has been
published earlier, in a chapter called Continue Bovenbouw
which is part of a whole book
(written in Dutch, my mother's tongue). The book is about what I thought
to be Foundational Issues in Mathematics, at that time. Meanwhile, I have come
to a quite different belief. I am convinced, nowadays, that all Mathematics is
complicated from the beginning and there is NO such thing as an evolution from
the simple to the more complicated. So far so good. Let's return to the point.
Our Densities and Senses Test Bank has been made available as:
Densities and Senses are quite intimately related to the subjects that follow.
The VaagZien demonstration program was developed, because I have been
fascinated quite some time by the notion of Fuzzy Optics. The subject
already fills a chapter in my 1995 (Dutch) book:
Further thinking has given rise to a couple of new delightful insights, which
should not be missing in my Snippets of Pure Applicable Mathematics (SPAM ;-) .
This ultimate Anti-Aliasing demo has been made available as:
What's highly frustrating for a computer minded musician is the fact that those
stupid machines still aren't capable of reading ordinary Music Score. No, they
can't ! Even though certain brave vendors
(as always) claim that they can. Have you ever fed a hand-written document into
your scanner and expect something sensible to come out ? Neat copies - having
been generated already with a Midi to Score comverter like the (excellent !)
NoteWorthy Composer - do not represent
a real-world problem, do they ? I'm So Sorry ...
This Pixel Thinning program has been deprecated because it is possible
to generate negative areas within contours of " thinned " pixels.
Thus exposing the basic Running Mean Iteration procedure implemented here as
unreliable. Meanwhile, the software has been replaced by a
What could have been the first step in Music Score Recognition, according to my
humble viewpoint, is the mere Recognition of Straight Lines. My Pixel
Thinning demonstration program doesn't actually do this, but may be thought
as a first step in the right direction:
Have you ever seen the transformations of a Continuous (Lie-) Group in action ?
I mean, 2-D transformations which do Continuous Scaling, Deformation, Rotation
and Translation of an Image. Of course you have. Certainly such transformations
are shipped with expensive Image Processing Packages (like Corel version x.y) .
But I'm quite sure that nobody has ever told you how to develop such techniques
entirely by yourself. Continuization instead of Discretization, again, makes it
simple and straightforward to accomplish such things. Here comes:
The program has been extended now with "Nyquist Scaling". Herewith I mean that
Scaling of the picture is adapted in such a way that the Amount of Fuzzyness
effectively remains equal to those 2 pixels. As if you look at the picture from
a greater distance, which is proportional to Fuzzyness. The advantage of this ?
An enormous gain in efficiency ! Because the amount of work is: the square of
fuzzyness times the size of the picture in both directions. But, there is no
loss of information at all, with small-less-fuzzy pictures, when compared with
Nyquist Scaling has a potential for recognizing
patterns in pictures. This may be demonstrated by setting the fuzzyness in X
direction to a large value, while leaving the fuzzyness in Y direction normal.
Now load the Temnapo Fortran listing and set the Contouring Level to a suitable value.
You will see that the text lines in the listing are actually distinguished by
the program, as a first step (and maybe also the last)-; to recognition.
It should be well known that establishing Isomorphism (read: Equality) of
Graphs is a highly non-trivial problem.
Almost any search on the Web
ends up in a Reference to an algorithm by Brendan McKay.
He was the first one to find all non-equivalent graphs up to order 11, for
Here comes a much more simple minded Program & Results
Graphs of order (number of interconnected nodes) up to and including eight:
A combinatorial explosion makes these calculations of mine too cumbersome above
the order 8 boundary (due to the Brute Force method used). BTW, did you know
that there are so many non-equivalent (connected) graphs of such order, namely:
A relevant reference was found on the Web, giving instead the following numbers:
- 1 graphs of order 2
- 3 graphs of order 3
- 6 graphs of order 4
- 21 graphs of order 5
- 112 graphs of order 6
- 853 graphs of order 7
- 11,117 graphs of order 8
The above is nevertheless correct, since the latter sequence encompasses also
graphs having subgraphs which are not mutually connected. And we have simply
excluded the latter. For this reason, a new variable 'netjes' has been added
to the program. Setting it to 'false' will generate the numbers of Polya's
Enumeration Theory for graphs.
- 1 , 2 , 4 , 11 , 34 , 156 , 1044 , 12346
Here are some more, thanks to The Online
Encyclopedia of Integer Sequences.
Sequence: 1 , 1 , 2 , 4 , 11 , 34 , 156 , 1044 , 12346 , 274668 , 12005168 ,
1018997864 , 165091172592 , 50502031367952 , 29054155657235488 ,
31426485969804308768 , 64001015704527557894928 ,
245935864153532932683719776 , 1787577725145611700547878190848 ,
Name: Graphs with n nodes.
One of the methods used in
my FCP project has been the finding of Cliques.
But, of course
(and again), I have not been the first one who has done this:
C. Bron and J. Kerbosch.
Finding All Cliques of an Undirected Graph.
Communications of the ACM 9, 16(9):575--577, 1973.
Anyway, here is my (recursive) program for
Finding All Cliques in an Undirected Graph:
Here is a helper program for the Decomposition of Permutations into Cycle
Factors and the Composition of Permutations from Disjoint Cycle Factors:
Quoted without permission: According to Vardi (1991), the Mathematica code
for ToCycles is one of the most obscure ever written. Why, oh why ? Since it is
clear from this contribution that the problem is quite easy to solve !
How to do calculations in a
Galois Field ? And how to define such
a weird monster in the first place ?
Reed-Solomon error correcting codes . . . Sigh !
Giving up. Sorry.
- Modulo Rings, Polynomials & Galois Fields.
code for doing some elementary algebra in Discrete Mathematics.
The so-called Term Structure of Interest Rates can be explained a great
a theory which takes into account the psychology of (positive) interest-bearing
Money. This theory reveals that the primary interest (: mind the word !) of our
GOD, the Grand Omnipotent Dollar, is in the Depreciation of our goods.
This may be called the Interest BY Depreciation
There are two versions of the software: an English and a Dutch one. The Dutch
version is found at the
The English version is found here:
- Term Structure of Interest Rates
- And how it was done
- Term Structure Data needed to run
Punch Cards have been a popular medium of data storage in the good old
days of computer technology. I still have a bunch of these items
at home. And once upon a day I wondered if it would still be
possible, not only to write these cards, but also to read them, back into our memory ;-)
This has lead to my software version of an IBM PunchCard Reader.
IBM Punch Card definitions are included as 'ibmkaart.tex':
- IBM PunchCard Reader executable
- And how it was done.
Also contains data which are needed to run the program.
- Accompanying documentation has been
Non ASCII: a
Non Fortran: f
Card Punch: O
f a f f f a ffff ff f
&ABCDEFGHI .<(+-JKLMNOPQR!$*);0/STUVWXYZ ,%_>^ 123456789:#@'="
2 | OOOOOOOOOOOOOOO | 2
1 | OOOOOOOOOOOOOOO | 1
0 | OOOOOOOOOOOOOOOO | 0
1 | O O O O | 1
2 | O O O O O O O O | 2
3 | O O O O O O O O | 3
4 | O O O O O O O O | 4
5 | O O O O O O O O | 5
6 | O O O O O O O O | 6
7 | O O O O O O | 7
8 | O OOOOO O OOOOO O OOOOOO O OOOOOO | 8
9 | O O O O | 9
&ABCDEFGHI .<(+-JKLMNOPQR!$*);0/STUVWXYZ ,%_>^ 123456789:#@'=?
Precautions and Limitations:
- Use a conventional flatbed (A4) scanner to scan the punchcards
- I think it's important to callibrate the scanner properly, before trying
to read in any pictures (because the program employs the resolution)
- The background color of the (white) cards should be Black. This can be
accomplished by covering them with black paper before scanning begins
- Cards must be scanned with their backside down as the surface which
contains the data. The human-readable side should be for your eyes only ;-)
- More than one card can be processed simultaneously. However, punchcards
should Not be mutually overlapping.
- All cards must be scanned in Black and White, resulting in monochrome
BMP files to be processed
- The examples were all scanned are at 100 DPI. Therefore I am not quite
what behaviour of the program is to be expected at other resolutions.
- Due to the kind of algorithm implemented, the program behaves best
if there are as "many" data on the punchcard as possible. Degenerate cases
- such as almost empty cards - have not been tested to a sufficient extent.
is rapidly becoming a common disease amomg programmers. Not surprisingly -
but also somewhat contradictory - computer programs have been developed, in an
attempt to prevent (other)
people from being exposed to Repititive Strain Injury.
Probably the best in its kind is WorkPace.
I have developed a much less advanced - say lightweight - version of this,
which does only the basic thing: force you to take a break from time to time.
Power Series in cosk(x) and Fourier Series in cos(k x) can
be converted into each other.
I clearly re-invented the wheel again,
since references on this subject could be found on the Internet at:
MAPLE supports the whole idea, for some time, with its expand command:
- SVIBOR - Collecting Data on Projects in Croatia.
Especially the numbers 28 and 43. (: broken link)
- TrigTricks, a Mathematica Notebook file.
64 cos(x)7 - 112 cos(x)5
+ 56 cos(x)3 - 7 cos(x)
Nevertheless, here comes: