You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.1 KiB
C++

// XTPMathUtils.cpp
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <math.h>
#include <float.h>
#include <Common/XTPMathUtils.h>
double CXTPMathUtils::m_dPI = acos(-1.0);
double CXTPMathUtils::m_dEPS = 1e-6;
double CXTPMathUtils::NormalizeRadian(double angleRadian)
{
double x = fabs(angleRadian) / (m_dPI * 2);
x = m_dPI * 2 * (x - floor(x));
return x * Sign(angleRadian);
}
double CXTPMathUtils::NormalizeDegree(double angle)
{
double result = angle - 360 * ((int)angle / 360);
if (result < 0)
result += 360;
return result;
}
int CXTPMathUtils::Compare(double value1, double value2, double epsilon)
{
if (fabs(value1 - value2) <= epsilon)
return 0;
if (value1 > value2)
return 1;
return - 1;
}
int CXTPMathUtils::Compare(double value1, double value2)
{
return Compare(value1, value2, m_dEPS);
}
int CXTPMathUtils::Sign(double value)
{
if (fabs(value) < m_dEPS)
return 0;
return value > 0 ? +1 : -1;
}
double CXTPMathUtils::Radian2Degree(double angleRadian)
{
return angleRadian * 180 / m_dPI;
}
double CXTPMathUtils::Degree2Radian(double angleDegree)
{
return angleDegree * m_dPI / 180.0;
}
int CXTPMathUtils::Round(double dValue)
{
int x = (int)floor(dValue);
return fabs(x - dValue) < fabs(x + 1 - dValue) ? x : x + 1;
}
double CXTPMathUtils::GetNaN()
{
unsigned long nan[2]={0xffffffff, 0x7fffffff};
double g = *( double* )nan;
return g;
}
BOOL CXTPMathUtils::IsNan(double x)
{
return _isnan(x);
}