forked from 0xha0/df_datalink
93 lines
2.4 KiB
C
93 lines
2.4 KiB
C
/*****************************************************************************/
|
|
/**
|
|
* @file eulerangles.h
|
|
* @author FanHao ([email protected])
|
|
* @version 0.0
|
|
* @date 2023-05-06
|
|
*
|
|
* @copyright Copyright(c) 2024 Beijing Institute of Technology.\n
|
|
* Lab of Communication and Network
|
|
*
|
|
******************************************************************************/
|
|
|
|
/**
|
|
* @addtogroup LinkLayer
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup LinkLayerGeometry
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @defgroup LinkLayerGeometry_EulerAngles
|
|
* @{
|
|
*/
|
|
|
|
#ifndef __EULERANGLES_H
|
|
#define __EULERANGLES_H
|
|
|
|
#define EUL_PI 3.14159265358979323846
|
|
|
|
#define DEG2RAD(d) ((EUL_PI / 180.0) * (d))
|
|
#define RAD2DEG(r) ((180.0 / EUL_PI) * (r))
|
|
|
|
/**
|
|
* Orientations are represented by 3D double precision Tait-Bryan (Euler) tuples
|
|
* called EulerAngles. The angles are in Z, Y', X" order that is often called
|
|
* intrinsic rotations, they are measured in radians. The default (unrotated)
|
|
* orientation is along the X axis. Conceptually, the Z axis rotation is heading,
|
|
* the Y' axis rotation is descending (negative elevation), the X" axis rotation is bank.
|
|
* For example, positive rotation along the Z axis rotates X into Y (turns left), positive
|
|
* rotation along the Y axis rotates Z into X (leans forward), positive rotation
|
|
* along the X axis rotates Y into Z (leans right).
|
|
*/
|
|
|
|
/**
|
|
* @struct EULERANGLES
|
|
* @brief Structure for standard quaternion
|
|
*/
|
|
typedef struct
|
|
{
|
|
double alpha; // unit rad
|
|
double beta; // unit rad
|
|
double gamma; // unit rad
|
|
} EULERANGLES;
|
|
|
|
typedef enum
|
|
{
|
|
EULERANGLES_NONE = 0,
|
|
EULERANGLES_ZYX = 1,
|
|
EULERANGLES_ZYZ = 2,
|
|
EULERANGLES_XYZ = 3,
|
|
} EULERANGLES_TYPE;
|
|
|
|
extern const EULERANGLES EULERANGLES_ZERO;
|
|
extern const EULERANGLES EULERANGLES_NIL;
|
|
|
|
/** @brief Add two EulerAngles. */
|
|
EULERANGLES EulerAngles_Add(EULERANGLES e1, EULERANGLES e2);
|
|
|
|
/** @brief Subtracts two EulerAngles. */
|
|
EULERANGLES EulerAngles_Sub(EULERANGLES e1, EULERANGLES e2);
|
|
|
|
/** @brief Multiplies EulerAngles by a real number. */
|
|
void EulerAngles_ScalarMult(EULERANGLES *e, double f);
|
|
|
|
/** @brief Multiplies EulerAngles by a real number. */
|
|
EULERANGLES EulerAngles_GetScalarMult(EULERANGLES e, double f);
|
|
|
|
/** @brief Normalize EulerAngles. */
|
|
void EulerAngles_Normalize(EULERANGLES *e);
|
|
|
|
/** @brief Normalize EulerAngles. */
|
|
EULERANGLES EulerAngles_GetNormalize(EULERANGLES e);
|
|
|
|
#endif
|
|
|
|
/** @} LinkLayerGeometry_EulerAngles */
|
|
|
|
/** @} LinkLayerGeometry */
|
|
|
|
/** @} LinkLayer */ |