pxmlw6n2f/Gazebo_Distributed_MPI/gazebo/math/Angle.cc

200 lines
4.6 KiB
C++

/*
* Copyright (C) 2012 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/* Desc: Angle class
* Author: Nate Koenig
* Date: 18 Aug 2008
*/
#include <math.h>
#include "gazebo/math/Helpers.hh"
#include "gazebo/math/Angle.hh"
using namespace gazebo;
using namespace math;
const Angle Angle::Zero = math::Angle(0);
const Angle Angle::Pi = math::Angle(M_PI);
const Angle Angle::HalfPi = math::Angle(M_PI * 0.5);
const Angle Angle::TwoPi = math::Angle(M_PI * 2.0);
//////////////////////////////////////////////////
Angle::Angle()
{
this->value = 0;
}
//////////////////////////////////////////////////
Angle::Angle(double _radian)
{
this->value = _radian;
}
//////////////////////////////////////////////////
Angle::Angle(const Angle &_angle)
{
this->value = _angle.value;
}
//////////////////////////////////////////////////
Angle::Angle(const ignition::math::Angle &_angle)
{
this->value = _angle.Radian();
}
//////////////////////////////////////////////////
Angle::~Angle()
{
}
//////////////////////////////////////////////////
void Angle::SetFromRadian(double _radian)
{
this->value = _radian;
}
//////////////////////////////////////////////////
void Angle::SetFromDegree(double _degree)
{
this->value = _degree * M_PI / 180.0;
}
//////////////////////////////////////////////////
double Angle::Radian() const
{
return this->value;
}
//////////////////////////////////////////////////
double Angle::Degree() const
{
return this->value * 180.0 / M_PI;
}
//////////////////////////////////////////////////
void Angle::Normalize()
{
this->value = atan2(sin(this->value), cos(this->value));
}
//////////////////////////////////////////////////
Angle Angle::operator-(const Angle &angle) const
{
return Angle(this->value - angle.value);
}
//////////////////////////////////////////////////
Angle Angle::operator+(const Angle &angle) const
{
return Angle(this->value + angle.value);
}
//////////////////////////////////////////////////
Angle Angle::operator*(const Angle &angle) const
{
return Angle(this->value * angle.value);
}
//////////////////////////////////////////////////
Angle Angle::operator/(const Angle &angle) const
{
return Angle(this->value / angle.value);
}
//////////////////////////////////////////////////
Angle Angle::operator-=(const Angle &angle)
{
this->value -= angle.value;
return *this;
}
//////////////////////////////////////////////////
Angle Angle::operator+=(const Angle &angle)
{
this->value += angle.value;
return *this;
}
//////////////////////////////////////////////////
Angle Angle::operator*=(const Angle &angle)
{
this->value *= angle.value;
return *this;
}
//////////////////////////////////////////////////
Angle Angle::operator/=(const Angle &angle)
{
this->value /= angle.value;
return *this;
}
//////////////////////////////////////////////////
bool Angle::operator ==(const Angle &angle) const
{
return equal(this->value, angle.value, 0.001);
}
//////////////////////////////////////////////////
bool Angle::operator!=(const Angle &angle) const
{
return !(*this == angle);
}
//////////////////////////////////////////////////
bool Angle::operator<(const Angle &angle) const
{
return this->value < angle.value;
}
//////////////////////////////////////////////////
bool Angle::operator<=(const Angle &angle) const
{
return this->value < angle.value || math::equal(this->value, angle.value);
}
//////////////////////////////////////////////////
bool Angle::operator>(const Angle &angle) const
{
return this->value > angle.value;
}
//////////////////////////////////////////////////
bool Angle::operator>=(const Angle &angle) const
{
return this->value > angle.value || math::equal(this->value, angle.value);
}
//////////////////////////////////////////////////
ignition::math::Angle Angle::Ign() const
{
return ignition::math::Angle(this->value);
}
//////////////////////////////////////////////////
Angle &Angle::operator=(const double &_angle)
{
this->value = _angle;
return *this;
}
//////////////////////////////////////////////////
Angle &Angle::operator=(const ignition::math::Angle &_angle)
{
this->value = _angle.Radian();
return *this;
}