智能车制作

标题: 关于电磁组反正弦的一点想法 [打印本页]

作者: 二硫碘化钾    时间: 2012-2-14 11:56
标题: 关于电磁组反正弦的一点想法
  1. #include <math.h>
  2. #define DIV 100                  //细分设置
  3. /*
  4. * 开始前先运行arc_sin_init(),生成tab_arc_sin数据表
  5. * 通过设置细分DIV的值设置运算的精度
  6. * 调用arc_sin()得到反正弦函数的值
  7. * 注意:1、这里只是提供一种方法,不保证程序的正确性和可行性
  8. *                  2、将DIV的值设为2的幂,如(2^7=128),angle*N可由移位得到,提高计算效率
  9. */
  10. void arc_sin_init(void){
  11.         unsigned int n;
  12.         unsigned int N = DIV;
  13.         float tab_arc_sin[N];
  14.         for(n=0;n<N;n++){
  15.                 tab_arc_sin[n]=arcsin((float)(n/N));
  16.         }
  17. }

  18. float arc_sin(float angle){                  //-1<=angle<=1
  19.         if(angle>=0){
  20.                 return(tab_arc_sin[unsigned int(angle*N)]);       
  21.         }else{
  22.                 return(tab_arc_sin[unsigned int(-angle*N)]);
  23.         }
  24. }
复制代码



补充内容 (2012-2-14 16:03):
第21、23行有错,中括号中应该是强制类型转换
作者: wo520    时间: 2012-2-14 12:05
貌似不错!不知道运算速度怎么样?
作者: jinkyu    时间: 2012-2-14 13:16
能不能直接计算,初始化数组
作者: 二硫碘化钾    时间: 2012-2-14 15:09
jinkyu 发表于 2012-2-14 13:16
能不能直接计算,初始化数组

当然,我的意思就是将反正弦的值先存放在数组中,然后再根据要求的反正弦直接从数组中查找,只不过要手动把这么多值输入到数组里面。。。工作量。。。所以刚开始的时候先把所有要计算的反正弦值先计算出来,存入数组,将来用的话直接查表,计算应该可以快点。。。

作者: 二硫碘化钾    时间: 2012-2-14 15:17
PS:实际中小车的角度不会偏太大(太大就要倒了),angle估计在-10度~+10度之间(具体值我也不清,隐隐约约好像记得5度还是10度来的,保险起见取大点,不差空间。。。s12xs128有128k空间呢!取正负九十度也不怕),所以实际数组中需要存放的数据并不太多(只要-10~+10之间的),这样也可以提高精度(不用担心数据量太大)




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