2个不稳定版本
0.3.0 | 2024年4月28日 |
---|---|
0.2.0 | 2024年4月3日 |
0.1.1 |
|
0.1.0 |
|
#385 in 数学
279 每月下载量
38KB
1K SLoC
liealg
Lie群和Lie代数在Rust中的实现
简介
liealg 是一个用于计算3D空间(SO3和SE3)中的Lie代数和Lie群的库。
应用领域
liealg 主要用于机器人运动学和相关领域。如果您想进行一些通用的Lie群和Lie代数计算,则最好不使用此库。
入门
在您的 Cargo.toml
中添加依赖项
[dependencies]
liealg = "0.1.1"
或者使用 cargo add
cargo add liealg
设计
liealg 中的实体关系如下
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];
SO3和SE3可以相乘矩阵、取逆和3D点。
使用方法
SO3
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
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);
依赖项
~3MB
~57K SLoC