67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
|
|
/*
|
|||
|
|
* HiperfacePositionData.h
|
|||
|
|
*
|
|||
|
|
* Created on: 20 <EFBFBD><EFBFBD><EFBFBD>. 2020 <EFBFBD>.
|
|||
|
|
* Author: user
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
#ifndef UMLIBRARY_DRIVER_HIPERFACEPOSITIONDATA_H_
|
|||
|
|
#define UMLIBRARY_DRIVER_HIPERFACEPOSITIONDATA_H_
|
|||
|
|
|
|||
|
|
#include "../math/math_inc.hh"
|
|||
|
|
|
|||
|
|
namespace driver {
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
struct PositionData {
|
|||
|
|
float angle; //!< <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
unsigned short turn; //!< <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
|
|||
|
|
PositionData operator+(float any_angle) const {
|
|||
|
|
|
|||
|
|
const short turns_in_angle = ( angle + any_angle ) / math::constants::pi2;
|
|||
|
|
const float angle_in_turn = ( angle + any_angle ) - turns_in_angle*math::constants::pi2;
|
|||
|
|
|
|||
|
|
return { angle_in_turn, turn + turns_in_angle };
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
PositionData operator-(float any_angle) const { return *this + (-any_angle); }
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//!<21><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Hiperface.
|
|||
|
|
struct PositionComponents {
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
float sin;
|
|||
|
|
float cos;
|
|||
|
|
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
unsigned long increment_position;
|
|||
|
|
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
operator bool() const {
|
|||
|
|
using namespace std;
|
|||
|
|
return isfinite(sin) and isfinite(cos);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool isLostSinCosComponents() const {
|
|||
|
|
using namespace std;
|
|||
|
|
return not( isfinite(sin) or isfinite(cos) );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
PositionComponents(float sin, float cos, unsigned long inc_pos) : sin(sin), cos(cos), increment_position(inc_pos) {}
|
|||
|
|
|
|||
|
|
PositionComponents & operator=(const PositionComponents &) = default;
|
|||
|
|
|
|||
|
|
PositionComponents() : sin(NAN), cos(NAN), increment_position(0) {}
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif /* UMLIBRARY_DRIVER_HIPERFACEPOSITIONDATA_H_ */
|