mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[wpimath] Memoize CoordinateSystem and CoordinateAxis statics (#4241)
This commit is contained in:
@@ -10,26 +10,32 @@ CoordinateAxis::CoordinateAxis(double x, double y, double z) : m_axis{x, y, z} {
|
||||
m_axis /= m_axis.norm();
|
||||
}
|
||||
|
||||
CoordinateAxis CoordinateAxis::N() {
|
||||
return CoordinateAxis{1.0, 0.0, 0.0};
|
||||
const CoordinateAxis& CoordinateAxis::N() {
|
||||
static const CoordinateAxis instance{1.0, 0.0, 0.0};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateAxis CoordinateAxis::S() {
|
||||
return CoordinateAxis{-1.0, 0.0, 0.0};
|
||||
const CoordinateAxis& CoordinateAxis::S() {
|
||||
static const CoordinateAxis instance{-1.0, 0.0, 0.0};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateAxis CoordinateAxis::E() {
|
||||
return CoordinateAxis{0.0, -1.0, 0.0};
|
||||
const CoordinateAxis& CoordinateAxis::E() {
|
||||
static const CoordinateAxis instance{0.0, -1.0, 0.0};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateAxis CoordinateAxis::W() {
|
||||
return CoordinateAxis{0.0, 1.0, 0.0};
|
||||
const CoordinateAxis& CoordinateAxis::W() {
|
||||
static const CoordinateAxis instance{0.0, 1.0, 0.0};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateAxis CoordinateAxis::U() {
|
||||
return CoordinateAxis{0.0, 0.0, 1.0};
|
||||
const CoordinateAxis& CoordinateAxis::U() {
|
||||
static const CoordinateAxis instance{0.0, 0.0, 1.0};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateAxis CoordinateAxis::D() {
|
||||
return CoordinateAxis{0.0, 0.0, -1.0};
|
||||
const CoordinateAxis& CoordinateAxis::D() {
|
||||
static const CoordinateAxis instance{0.0, 0.0, -1.0};
|
||||
return instance;
|
||||
}
|
||||
|
||||
@@ -69,19 +69,22 @@ CoordinateSystem::CoordinateSystem(const CoordinateAxis& positiveX,
|
||||
m_rotation = Rotation3d{Quaternion{w, x, y, z}};
|
||||
}
|
||||
|
||||
CoordinateSystem CoordinateSystem::NWU() {
|
||||
return CoordinateSystem{CoordinateAxis::N(), CoordinateAxis::W(),
|
||||
CoordinateAxis::U()};
|
||||
const CoordinateSystem& CoordinateSystem::NWU() {
|
||||
static const CoordinateSystem instance{
|
||||
CoordinateAxis::N(), CoordinateAxis::W(), CoordinateAxis::U()};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateSystem CoordinateSystem::EDN() {
|
||||
return CoordinateSystem{CoordinateAxis::E(), CoordinateAxis::D(),
|
||||
CoordinateAxis::N()};
|
||||
const CoordinateSystem& CoordinateSystem::EDN() {
|
||||
static const CoordinateSystem instance{
|
||||
CoordinateAxis::E(), CoordinateAxis::D(), CoordinateAxis::N()};
|
||||
return instance;
|
||||
}
|
||||
|
||||
CoordinateSystem CoordinateSystem::NED() {
|
||||
return CoordinateSystem{CoordinateAxis::N(), CoordinateAxis::E(),
|
||||
CoordinateAxis::D()};
|
||||
const CoordinateSystem& CoordinateSystem::NED() {
|
||||
static const CoordinateSystem instance{
|
||||
CoordinateAxis::N(), CoordinateAxis::E(), CoordinateAxis::D()};
|
||||
return instance;
|
||||
}
|
||||
|
||||
Pose3d CoordinateSystem::Convert(const Pose3d& pose,
|
||||
|
||||
Reference in New Issue
Block a user