西昌.何雨锋 常用数学函数
//-------------这里的数学函数非TV中的。
1、
fmod(float x,float y);
对浮点数取模。
2、
abs() 求绝对值
fabs() 求float的绝对值
3、已知x,z点,求与0,0点的坐标位置算法:
if(x>0&&z>0) //1象限
roty=ATan(z/x)
if(x<0) //2、3象限
roty=ATan(z/x)+180
if(x>0&&z<0) //4象限
roty=360+ATan(z/x)
4、一个物体左右连续转动的公式为
turn_left:
roty=fmod(get_roty()+360,360)-转动量;
turn_right:
roty=fmod(get_roty()+360,360)+转动量;
这样得到的roty始终为正的,且一直在0~360之间。
但是虽然可以正常转动,但是实际上转动的角度却并不正确。
5、要想得到一个物体正确的转向位置,得用:
jiao_man=fmod(180-roty+360,360); //这样就可以得到正确的0-360角度,但是这个角度可不能在实际场景中使用,只能用于计算。
6、已知屏幕上A点(x1,z1),B点(x2,z2),那么A点与B点的夹角算法为:
if(x2-x1>0&&z2-z1>0) //1象限
jiao_t=math1->ATan((z2-z1)/(x2-x1));
if(x2-x1<0) //2、3象限
jiao_t=math1->ATan((z2-z1)/(x2-x1))+180;
if(x2-x1>0&&z2-z1<0) //4象限
jiao_t=360+math1->ATan((z2-z1)/(x2-x1));
这样算出来的夹角为0-360的正确夹角。
7、已知A点坐标及望向的方向,给定另一个目标点,要求A通过旋转望向目标点,方法为:
jiao_x=fmod(jiao_man-jiao_t+360,360); //jiao_x为A点所望方向jiao_man与AB点的夹角的角度差的0~360表现角。
if(jiao_x>=180&&jiao_x<360)
{
turn_left();
}
if((jiao_x<180&&jiao_x>90)||(jiao_x>=0&&jiao_x<90))
{
turn_right();
}