106 lines
2.4 KiB
C++
106 lines
2.4 KiB
C++
/**
|
|
* @file include/lemlib/pose.hpp
|
|
* @author LemLib Team
|
|
* @brief Pose class declarations
|
|
* @version 0.4.5
|
|
* @date 2023-01-23
|
|
*
|
|
* @copyright Copyright (c) 2023
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
namespace lemlib {
|
|
class Pose {
|
|
public:
|
|
/** @brief x value*/
|
|
float x;
|
|
/** @brief y value*/
|
|
float y;
|
|
/** @brief theta value*/
|
|
float theta;
|
|
/**
|
|
* @brief Create a new pose
|
|
*
|
|
* @param x component
|
|
* @param y component
|
|
* @param theta heading. Defaults to 0
|
|
*/
|
|
Pose(float x, float y, float theta = 0);
|
|
/**
|
|
* @brief Add a pose to this pose
|
|
*
|
|
* @param other other pose
|
|
* @return Pose
|
|
*/
|
|
Pose operator+(const Pose& other);
|
|
/**
|
|
* @brief Subtract a pose from this pose
|
|
*
|
|
* @param other other pose
|
|
* @return Pose
|
|
*/
|
|
Pose operator-(const Pose& other);
|
|
/**
|
|
* @brief Multiply a pose by this pose
|
|
*
|
|
* @param other other pose
|
|
* @return Pose
|
|
*/
|
|
float operator*(const Pose& other);
|
|
/**
|
|
* @brief Multiply a pose by a float
|
|
*
|
|
* @param other float
|
|
* @return Pose
|
|
*/
|
|
Pose operator*(const float& other);
|
|
/**
|
|
* @brief Divide a pose by a float
|
|
*
|
|
* @param other float
|
|
* @return Pose
|
|
*/
|
|
Pose operator/(const float& other);
|
|
/**
|
|
* @brief Linearly interpolate between two poses
|
|
*
|
|
* @param other the other pose
|
|
* @param t t value
|
|
* @return Pose
|
|
*/
|
|
Pose lerp(Pose other, float t);
|
|
/**
|
|
* @brief Get the distance between two poses
|
|
*
|
|
* @param other the other pose
|
|
* @return float
|
|
*/
|
|
float distance(Pose other) const;
|
|
/**
|
|
* @brief Get the angle between two poses
|
|
*
|
|
* @param other the other pose
|
|
* @return float in radians
|
|
*/
|
|
float angle(Pose other) const;
|
|
/**
|
|
* @brief Rotate a pose by an angle
|
|
*
|
|
* @param angle angle in radians
|
|
* @return Pose
|
|
*/
|
|
Pose rotate(float angle);
|
|
};
|
|
|
|
/**
|
|
* @brief Format a pose
|
|
*
|
|
* @param pose
|
|
* @return std::string
|
|
*/
|
|
std::string format_as(const Pose& pose);
|
|
} // namespace lemlib
|