智能车制作

标题: 分享个能代替反正弦的小程序。 [打印本页]

作者: qinlu123    时间: 2012-9-24 21:03
标题: 分享个能代替反正弦的小程序。
这是前两天电赛的时候写的,计算范围是-90到90,因为这个程序主要是液晶显示我在原程序的基础上做了下修改(在记事本里改的可能有错误),虽然手段比较低级不过还挺好用。
//////////////此程序用于液晶显示将计算的angle除以10才是真实角度///////
int anglejust(float jiaodu)
{
  unsigned char i;
  if(jiaodu<0)
{
    jiaodu=-jiaodu;
    i=1;
  }
  if(jiaodu>0)
    i=0;
  if(jiaodu>=0 && jiaodu<0.0871)
    angle=(int)(jiaodu/0.0871*5*10);
  else if(jiaodu>=0.0871 && jiaodu<0.1736)
    angle=(int)(((jiaodu-0.0871)/0.0865*5+5)*10);
  else if(jiaodu>=0.1736 && jiaodu<0.2588)
    angle=(int)(((jiaodu-0.1736)/0.0852*5+10)*10);
  else if(jiaodu>=0.2588 && jiaodu<0.3420)
    angle=(int)(((jiaodu-0.2588)/0.0832*5+15)*10);
  else if(jiaodu>=0.3420 && jiaodu<0.4226)
    angle=(int)(((jiaodu-0.3420)/0.0806*5+20)*10);
  else if(jiaodu>=0.4226 && jiaodu<0.5000)
    angle=(int)(((jiaodu-0.4226)/0.0774*5+25)*10);
  else if(jiaodu>=0.5000 && jiaodu<0.5735)
    angle=(int)(((jiaodu-0.5000)/0.0735*5+30)*10);
  else if(jiaodu>=0.5735 && jiaodu<0.6428)
    angle=(int)(((jiaodu-0.5735)/0.0693*5+35)*10);
  else if(jiaodu>=0.6428 && jiaodu<0.7071)
    angle=(int)(((jiaodu-0.6428)/0.0643*5+40)*10);
  else if(jiaodu>=0.7071 && jiaodu<0.7660)
    angle=(int)(((jiaodu-0.7071)/0.0589*5+45)*10);
  else if(jiaodu>=0.7660 && jiaodu<0.8191)
    angle=(int)(((jiaodu-0.7660)/0.0531*5+50)*10);
  else if(jiaodu>=0.8191 && jiaodu<0.8660)
    angle=(int)(((jiaodu-0.8191)/0.0469*5+55)*10);
  else if(jiaodu>=0.8660 && jiaodu<0.9063)
    angle=(int)(((jiaodu-0.8660)/0.0403*5+60)*10);
  else if(jiaodu>=0.9063 && jiaodu<0.9396)
    angle=(int)(((jiaodu-0.9063)/0.0333*5+65)*10);
  else if(jiaodu>=0.9396 && jiaodu<0.9659)
    angle=(int)(((jiaodu-0.9396)/0.0263*5+70)*10);
  else if(jiaodu>=0.9659 && jiaodu<0.9848)
    angle=(int)(((jiaodu-0.9659)/0.0189*5+75)*10);
  else if(jiaodu>=0.9848 && jiaodu<0.9962)
    angle=(int)(((jiaodu-0.9848)/0.0114*5+80)*10);
  else if(jiaodu>=0.9962 && jiaodu<1)
    angle=(int)(((jiaodu-0.9962)/0.0038*5+85)*10);
  else if(jiaodu>=1)
    angle=900;
  if(i==1)
    angle=-angle;
  return angle;
}

作者: perfect_co    时间: 2012-9-24 22:00
至于吗,直接查表好了
作者: bobo_12300    时间: 2012-9-24 23:12
额·~~这个。。。
作者: 叶子一哥    时间: 2012-9-25 00:03

作者: quzhanguang    时间: 2012-9-25 00:22
叶子一哥 发表于 2012-9-25 00:03



作者: qinlu123    时间: 2012-9-25 16:50
perfect_co 发表于 2012-9-24 22:00
至于吗,直接查表好了

我试过不是很好用,可能是弄得有问题。大哥教教我呗,别嫌我笨。
作者: perfect_co    时间: 2012-9-25 17:56
qinlu123 发表于 2012-9-25 16:50
我试过不是很好用,可能是弄得有问题。大哥教教我呗,别嫌我笨。

把函数结果按等分点做成数组(表格),比如128点的表格,然后一个周期内要查哪个点,直接查数组不就行了,有时要查的点不正好是0~127,这是可以采用映射手段,或者取舍方法来查表,虽然会有误差,但当表中点数多时,这个误差可以忽略。

作者: qinlu123    时间: 2012-9-25 18:37
perfect_co 发表于 2012-9-25 17:56
把函数结果按等分点做成数组(表格),比如128点的表格,然后一个周期内要查哪个点,直接查数组不就行了, ...

好办法。





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2