Skip to content

Instantly share code, notes, and snippets.

@topin89
Created October 30, 2018 11:33
Show Gist options
  • Save topin89/1dde3fc08e0c9a4a11c23a980bd3ab37 to your computer and use it in GitHub Desktop.
Save topin89/1dde3fc08e0c9a4a11c23a980bd3ab37 to your computer and use it in GitHub Desktop.
converts [-180;+180] degree angle to (-inf;+inf)
#include <iostream>
class ContinuousAngle {
public:
auto &reset() {
trimmed_angle_ = 0;
turns_ = 0;
return *this;
}
auto &update(double trimmed_angle) {
if (trimmed_angle_ > 90 && trimmed_angle < 0) {
turns_++;
} else if (trimmed_angle_ < -90 && trimmed_angle > 0) {
turns_--;
}
trimmed_angle_=trimmed_angle;
return *this;
}
auto get() {
return 360*turns_+trimmed_angle_;
}
private:
double trimmed_angle_=0;
int turns_ = 0;
};
int main()
{
auto angle=ContinuousAngle{};
for(int k=0; k < 5; k++){
for (int i=0; i < 180; i+=10){
std::cout << angle.update(i).get() <<' ';
}
for (int i=-180; i <= 0; i+=10){
std::cout << angle.update(i).get() <<' ';
}
std::cout << '\n';
}
for(int k=0; k < 10; k++){
for (int i=0; i > -180; i-=10){
std::cout << angle.update(i).get() <<' ';
}
for (int i=180; i >= 0; i-=10){
std::cout << angle.update(i).get() <<' ';
}
std::cout << '\n';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment