X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11e82c1ba38223407b21cd30c0003f0d3a5d902d..1fd1922a49351a377bc6ef8f7e00f150112ee096:/src/common/geometry.cpp diff --git a/src/common/geometry.cpp b/src/common/geometry.cpp index d53b1f9a57..da7506b768 100644 --- a/src/common/geometry.cpp +++ b/src/common/geometry.cpp @@ -26,10 +26,14 @@ #include "wx/log.h" #include - #include "wx/geometry.h" #include "wx/datstrm.h" +// normally this is defined in +#ifndef M_PI + #define M_PI 3.14159265358979323846 +#endif + // // wxPoint2D // @@ -177,8 +181,8 @@ wxDouble wxPoint2DInt::GetVectorAngle() return 180; } - // casts needed MIPSpro compiler under SGI - wxDouble deg = atan2( (double)m_y , (double)m_x ) * 180 / 3.14159265359; + // casts needed for MIPSpro compiler under SGI + wxDouble deg = atan2( (double)m_y , (double)m_x ) * 180 / M_PI; if ( deg < 0 ) { deg += 360; @@ -187,6 +191,44 @@ wxDouble wxPoint2DInt::GetVectorAngle() } +void wxPoint2DInt::SetVectorAngle( wxDouble degrees ) +{ + wxDouble length = GetVectorLength(); + m_x = (int)(length * cos( degrees / 180 * M_PI )); + m_y = (int)(length * sin( degrees / 180 * M_PI )); +} + +wxDouble wxPoint2DDouble::GetVectorAngle() const +{ + if ( m_x == 0 ) + { + if ( m_y >= 0 ) + return 90; + else + return 270; + } + if ( m_y == 0 ) + { + if ( m_x >= 0 ) + return 0; + else + return 180; + } + wxDouble deg = atan2( m_y , m_x ) * 180 / M_PI; + if ( deg < 0 ) + { + deg += 360; + } + return deg; +} + +void wxPoint2DDouble::SetVectorAngle( wxDouble degrees ) +{ + wxDouble length = GetVectorLength(); + m_x = length * cos( degrees / 180 * M_PI ); + m_y = length * sin( degrees / 180 * M_PI ); +} + // wxRect2D bool wxRect2DInt::Intersects( const wxRect2DInt &rect ) const