[eigen] Spline revival

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Hi,

due to a recent request, I revisited my spline fork and adapted code
from it to the most recent Eigen version. Because the maintenance of
this quite old fork is a bit ugly, I switched to patch queues. The
most recent patch file, which was build against today's tip should be
working fine. If I am not wrong, it can be imported by running

$> hg import splines.patch

from the console.

The patch provides a simple Spline class and an interpolating spline
fitting in the unsupported module. The Spline class is templated over
the float type, the dimension and the degree. As for matrices, the
degree can be chosed dynamically, when it is set to Eigen::Dynamic at
compile time. The benefit is that with a small and fixed degree which
is known at compile time, the Spline class needs almost no heap
allocations.

After running CMake there are some simple unit tests available in
<build_dir>/unsupported/test/. So far I only tested VC10, x64. There
are most likely some "typename" keywords missing as VC10 never
complains and I tend to forget to specify them. :)

There are some design questions which are still open:

1) Should the global functions below go into a separate namespace as
e.g. Eigen::Splines or do we keep a single namespace?
  Eigen::KnotAveraging
  Eigen::ChordLengths

2) Is there a better solution for the static Spline member functions
Spline::Span and Spline::BasisFunctions? Do they need to be static?
IIRC, the reason for them being static is that
a) they need to be used when there is not yet a Spline object
available (see e.g. SplineFitting<SplineType>::Interpolate)
b) they can benefit (in particular Spline::BasisFunctions) from
knowing about the underlying Spline's compile time degree

Any comments are welcome and I hope to be able to merge this soon with
the master branch.

Regards,
Hauke

Attachment: splines.patch
Description: Binary data



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/