Crate efd

source ·
Expand description

§EFD Rust Library

dependency status documentation

Elliptical Fourier Descriptor (EFD) implementation in Rust. This crate implements 1D/2D/3D EFD and its related functions.

This implementation is totally safe and supports no-std + alloc environment.

Keyword Alias:

  • Elliptical Fourier Analysis (EFA)
  • Elliptical Fourier Function (EFF)

Example of re-describing a new closed curve:

let curve = vec![
    [0., 0.],
    [1., 1.],
    [2., 2.],
    [3., 3.],
    [2., 2.],
    [1., 1.],
let described_curve = efd::Efd2::from_curve(curve, false).recon(20);

The harmonic number can be set with efd::Efd::from_curve_harmonic() method. The following figures show the reconstruction of a 2D closed curve with 1-8 harmonics.

1h 2h 3h 4h
5h 6h 7h 8h

§Example Images

2D and 3D closed curve:

2d 3d

2D and 3D open curve:

2d 3d

Posed EFD combined a curve with a pose (unit vectors) to describe the orientation of each point.

2D open curve and its full reconstruction:

posed posed-full



§My Applications

  • Chang, Y., Chang, JL., Lee, JJ. (2024). Atlas-Based Path Synthesis of Planar Four-Bar Linkages Using Elliptical Fourier Descriptors. In: Okada, M. (eds) Advances in Mechanism and Machine Science. IFToMM WC 2023. Mechanisms and Machine Science, vol 149. Springer, Cham.
  • Chang, Y., Chang, JL. & Lee, JJ. Path Synthesis of Planar Four-bar Linkages for Closed and Open Curves Using Elliptical Fourier Descriptors. J Mech Sci Technol (2024).


This crate supports no-std solution. Disable the “std” feature will enable it.

default-features = false



  • Posed EFD (Elliptic Fourier Descriptor) is a special shape to describe the pose of a curve. It is a combination of two curves, the first is the original curve, and the second is the pose unit vectors.
  • Utility functions for the library.


  • Elliptical Fourier Descriptor coefficients. Provide transformation between discrete points and coefficients.
  • Geometric variables.
  • Motion signature with the target position.
  • Path signature with the target position.
  • An open-curve shape with a pose described by EFD.


  • EFD dimension marker.



  • Get the normalized time parameters of the curve.
  • Calculate the number of harmonics.
  • Calculate the number of harmonics with the Nyquist frequency.

Type Aliases§

  • Coefficients type.
  • A 1D shape described by EFD.
  • A 2D shape described by EFD.
  • A 3D shape described by EFD.
  • 1D geometric type.
  • 2D geometric type.
  • 3D geometric type.
  • An owned matrix of specific coefficients. (Dx2)
  • A 1D shape with a pose described by EFD.
  • A 2D shape with a pose described by EFD.
  • A 3D shape with a pose described by EFD.
  • Rotation type of the EFD.