liealg 0.4.0

lie group and lie algebra in rust
Documentation
# liealg
## Lie group and Lie algebra in rust

## introduction

*liealg* is a library for computing Lie algebra and Lie group in 3D space(SO3 and SE3).

### domain
*liealg* is mainly used in robot kinematics and other related area. If you want to do some general Lie group and Lie algebra calculations, it is better not to use this library.

## get started

add dependency in your `Cargo.toml`:
```toml
[dependencies]
liealg = "0.1.1"
```
or use `cargo add`:
```bash
cargo add liealg
```

## design
entities in *liealg* are related as follows:
```mermaid
  graph TD;
      A[Vec3]-->|hat|B[so3];
      B-->|vee|A;
      B-->|exp|C[SO3];
      C-->|log|B;
      C-->|adjoint|D[AdjSO3];

      E[Vec6]-->|hat|F[se3];
      F-->|vee|E;
      F-->|exp|J[SE3];
      J-->|log|F;
      J-->|adjoint|K[AdjSE3];
```

and SO3 and SE3 can multiply matrices, take inverse and 3D point.

## usage
### SO3

```rust
use liealg::prelude::*;
use liealg::{Vec3, Point};
// construct Vec3
let v = Vec3::new(0., 0., 1.) * FRAC_PI_2;

// hat convert Vec3 to so3
let so3 = v.hat();

// exp convert so3 to SO3
let rot = so3.exp();

// SO3 mat_mul
let _ = rot.mat_mul(&other);

// SO3 inverse
let rot_inv = rot.inv();

// SO3 act on 3D point
let point = Point::new(1., 2., 3.);
let _ = rot.act(&point);
```

### SE3
```rust
use liealg::prelude::*;
use liealg::{Vec3, Point};
// construct Vec6
let v = Vec6::new([0., 0., 1], [0., -1., 0.]) * FRAC_PI_2;

// hat convert Vec6 to se3
let se3 = v.hat();

// exp convert se3 to SE3
let t = se3.exp();

// SE3 mat_mul
let _ = t.mat_mul(&other);

// SE3 inverse
let inv = rot.inv();

// SE3 act on 3D point
let point = Point::new(1., 2., 3.);
let _ = rot.act(&point);
```