Jef*_*err 3 c++ math trigonometry
我不能使用C ++函数sin(),并cos()因引起的PS3 3.40 SDK编译器的某些问题。sin()&的计算是什么,cos()所以我可以在不需要的情况下使用函数math.h?
到目前为止,我已经想出了这些,但它们似乎无法正常运行?
float sin(float deg) {
bool neg = false;
while (deg >= 360) deg = deg - 360;
while (deg < 0) deg = deg + 360;
if (deg > 180) {
deg = deg - 180;
neg = true;
}
float ret = (float)(4*deg*(180-deg))/(40500-(deg*(180-deg)));
if (neg)return ret*-1;
return ret;
}
float cos(float AnglesDeg)
{
float AnglesRad = DegreesToRadians(AnglesDeg);
float Rad = (float)(PI/2.0f)-AnglesRad;
float ang = RadiansToDegrees(Rad);
return sin(ang);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用泰勒级数自行实现。代码很简单:
float sine(int deg) {
deg %= 360; // make it less than 360
float rad = deg * PI / 180;
float sin = 0;
int i;
for(i = 0; i < TERMS; i++) { // That's Taylor series!!
sin += power(-1, i) * power(rad, 2 * i + 1) / fact(2 * i + 1);
}
return sin;
}
float cosine(int deg) {
deg %= 360; // make it less than 360
float rad = deg * PI / 180;
float cos = 0;
int i;
for(i = 0; i < TERMS; i++) { // That's also Taylor series!!
cos += power(-1, i) * power(rad, 2 * i) / fact(2 * i);
}
return cos;
}
Run Code Online (Sandbox Code Playgroud)
正如你所说你没有 math.h,我为这个算法做了一个简单的幂函数。您还需要一个函数来计算阶乘数字。他们来了:
float power(float base, int exp) {
if(exp < 0) {
if(base == 0)
return -0; // Error!!
return 1 / (base * power(base, (-exp) - 1));
}
if(exp == 0)
return 1;
if(exp == 1)
return base;
return base * power(base, exp - 1);
}
int fact(int n) {
return n <= 0 ? 1 : n * fact(n-1);
}
Run Code Online (Sandbox Code Playgroud)
PI 和 TERMS 只是#define我使用的预处理器指令 ( 's),即 PI 3.14159(在我的情况下,我使用了 50 位精度的 pi,这是完全不必要的),而 TERMS 是 7。