fixed namespace bug in LAtan/LSinCos
This commit is contained in:
@@ -2,34 +2,31 @@
|
||||
#include<cmath>
|
||||
namespace hgl
|
||||
{
|
||||
namespace algorithm
|
||||
/**
|
||||
* fast atan2
|
||||
* from: Jim Shima
|
||||
* date: 1999/04/23
|
||||
*/
|
||||
double Latan2(double y, double x)
|
||||
{
|
||||
/**
|
||||
* fast atan2
|
||||
* from: Jim Shima
|
||||
* date: 1999/04/23
|
||||
*/
|
||||
double Latan2(double y, double x)
|
||||
double abs_y = fabs(y) + 1e-10; // kludge to prevent 0/0 condition
|
||||
double angle;
|
||||
double r;
|
||||
|
||||
if (x >= 0)
|
||||
{
|
||||
double abs_y = fabs(y) + 1e-10; // kludge to prevent 0/0 condition
|
||||
double angle;
|
||||
double r;
|
||||
|
||||
if (x >= 0)
|
||||
{
|
||||
r = (x - abs_y) / (x + abs_y);
|
||||
angle = HGL_PI_4 - HGL_PI_4 * r;
|
||||
}
|
||||
else
|
||||
{
|
||||
r = (x + abs_y) / (abs_y - x);
|
||||
angle = HGL_PI_3_4 - HGL_PI_4 * r;
|
||||
}
|
||||
|
||||
if (y < 0)
|
||||
return (-angle); // negate if in quad III or IV
|
||||
else
|
||||
return (angle);
|
||||
r = (x - abs_y) / (x + abs_y);
|
||||
angle = HGL_PI_4 - HGL_PI_4 * r;
|
||||
}
|
||||
}//namespace algorithm
|
||||
else
|
||||
{
|
||||
r = (x + abs_y) / (abs_y - x);
|
||||
angle = HGL_PI_3_4 - HGL_PI_4 * r;
|
||||
}
|
||||
|
||||
if (y < 0)
|
||||
return (-angle); // negate if in quad III or IV
|
||||
else
|
||||
return (angle);
|
||||
}
|
||||
}//namespace hgl
|
||||
|
@@ -1,6 +1,6 @@
|
||||
namespace hgl
|
||||
{
|
||||
namespace algorithm
|
||||
namespace
|
||||
{
|
||||
constexpr unsigned int SINV[91] = { 0,
|
||||
17452406, 34899496, 52335956, 69756473, 87155742, 104528463,
|
||||
@@ -18,53 +18,53 @@
|
||||
956304755, 961261695, 965925826, 970295726, 974370064, 978147600,
|
||||
981627183, 984807753, 987688340, 990268068, 992546151, 994521895,
|
||||
996194698, 997564050, 998629534, 999390827, 999847695, 1000000000 };
|
||||
}
|
||||
|
||||
double Lsin(int angle)
|
||||
{
|
||||
double sf;
|
||||
double Lsin(int angle)
|
||||
{
|
||||
double sf;
|
||||
|
||||
if (angle > 360 || angle < -360)angle = angle - (angle / 360) * 360;
|
||||
if (angle < 0)angle = 360 + angle;
|
||||
if (angle > 180)sf = -1; else sf = 1;
|
||||
if (angle > 360 || angle < -360)angle = angle - (angle / 360) * 360;
|
||||
if (angle < 0)angle = 360 + angle;
|
||||
if (angle > 180)sf = -1; else sf = 1;
|
||||
|
||||
if (angle > 90 && angle <= 180)angle = 180 - angle; else
|
||||
if (angle > 180 && angle <= 270)angle = angle - 180; else
|
||||
if (angle > 270)angle = 360 - angle;
|
||||
if (angle > 90 && angle <= 180)angle = 180 - angle; else
|
||||
if (angle > 180 && angle <= 270)angle = angle - 180; else
|
||||
if (angle > 270)angle = 360 - angle;
|
||||
|
||||
return sf*SINV[angle] / 10.0e8;
|
||||
}
|
||||
return sf*SINV[angle] / 10.0e8;
|
||||
}
|
||||
|
||||
double Lcos(int angle)
|
||||
{
|
||||
double cf;
|
||||
double Lcos(int angle)
|
||||
{
|
||||
double cf;
|
||||
|
||||
if (angle > 360 || angle < -360)angle = angle - (angle / 360) * 360;
|
||||
if (angle < 0)angle = 360 + angle;
|
||||
if (angle < 270 && angle>90)cf = -1; else cf = 1;
|
||||
if (angle > 360 || angle < -360)angle = angle - (angle / 360) * 360;
|
||||
if (angle < 0)angle = 360 + angle;
|
||||
if (angle < 270 && angle>90)cf = -1; else cf = 1;
|
||||
|
||||
if (angle > 90 && angle <= 180)angle = 180 - angle; else
|
||||
if (angle > 180 && angle <= 270)angle = angle - 180; else
|
||||
if (angle > 270)angle = 360 - angle;
|
||||
if (angle > 90 && angle <= 180)angle = 180 - angle; else
|
||||
if (angle > 180 && angle <= 270)angle = angle - 180; else
|
||||
if (angle > 270)angle = 360 - angle;
|
||||
|
||||
return cf*SINV[90 - angle] / 10.0e8;
|
||||
}
|
||||
return cf*SINV[90 - angle] / 10.0e8;
|
||||
}
|
||||
|
||||
void Lsincos(int angle, double &s, double &c)
|
||||
{
|
||||
double sf;
|
||||
double cf;
|
||||
void Lsincos(int angle, double &s, double &c)
|
||||
{
|
||||
double sf;
|
||||
double cf;
|
||||
|
||||
if (angle > 360 || angle < -360)angle = angle - (angle / 360) * 360;
|
||||
if (angle < 0)angle = 360 + angle;
|
||||
if (angle > 180)sf = -1; else sf = 1;
|
||||
if (angle < 270 && angle>90)cf = -1; else cf = 1;
|
||||
if (angle > 360 || angle < -360)angle = angle - (angle / 360) * 360;
|
||||
if (angle < 0)angle = 360 + angle;
|
||||
if (angle > 180)sf = -1; else sf = 1;
|
||||
if (angle < 270 && angle>90)cf = -1; else cf = 1;
|
||||
|
||||
if (angle > 90 && angle <= 180)angle = 180 - angle; else
|
||||
if (angle > 180 && angle <= 270)angle = angle - 180; else
|
||||
if (angle > 270)angle = 360 - angle;
|
||||
if (angle > 90 && angle <= 180)angle = 180 - angle; else
|
||||
if (angle > 180 && angle <= 270)angle = angle - 180; else
|
||||
if (angle > 270)angle = 360 - angle;
|
||||
|
||||
s = sf*SINV[angle] / 10.0e8;
|
||||
c = cf*SINV[90 - angle] / 10.0e8;
|
||||
}
|
||||
}//namespace algorithm
|
||||
s = sf*SINV[angle] / 10.0e8;
|
||||
c = cf*SINV[90 - angle] / 10.0e8;
|
||||
}
|
||||
}//namespace hgl
|
||||
|
Reference in New Issue
Block a user