#macro-derive #no-alloc

macro no-std coordinate-frame-derive

Very simple coordinate frame conversions

7 releases (4 breaking)

0.5.0 Jul 14, 2024
0.4.0 Jul 13, 2024
0.3.2 Jul 10, 2024
0.2.0 Jul 8, 2024
0.1.0 Jul 8, 2024

#5 in #derive-macro


Used in 2 crates (via coordinate-frame)

EUPL-1.2 OR Apache-2.0 OR MIT

57KB
1K SLoC

Simple coordinate frame conversions

Crates.io Docs Build Status Safety Dance MSRV EUPL 1.2 licensed Apache 2.0 licensed MIT licensed

This crate aims at supporting simple conversions between different standard and non-standard coordinate frames. One potential use-case is in prototyping IMU sensor data where multiple inertial or field sensors may be mounted in different orientations. These can then be expressed in terms of coordinate frames such as EastNorthUp and trivially converted to whatever basis you prefer, for example NorthEastDown.

Example

use coordinate_frame::{NorthEastDown, NorthEastUp};

fn example() {
    // Construct a coordinate in one reference frame.
    let neu = NorthEastUp::new(1.0, 2.0, 3.0);
    assert_eq!(neu.north(), 1.0);
    assert_eq!(neu.east(), 2.0);
    assert_eq!(neu.up(), 3.0);

    // Note that "non-native" axes are also available.
    assert_eq!(neu.down(), -3.0);

    // You can transform it into a different frame.
    let ned: NorthEastDown<_> = neu.into();
    assert_eq!(ned.north(), 1.0);
    assert_eq!(ned.east(), 2.0);
    assert_eq!(ned.down(), -3.0);

    // Information is available as you'd expect.
    assert_eq!(ned, &[1.0, 2.0, -3.0]);
    assert_eq!(ned.x(), 1.0);
    assert_eq!(ned.z(), -3.0);
}

Code of Conduct

We abide by the Contributor Covenant and ask that you do as well.

License

Copyright © 2024 Markus Mayer

Triple licensed under your choice of either of:

Dependencies

~240–680KB
~16K SLoC