智能车制作
标题:
关于电磁组反正弦的一点想法
[打印本页]
作者:
二硫碘化钾
时间:
2012-2-14 11:56
标题:
关于电磁组反正弦的一点想法
#include <math.h>
#define DIV 100 //细分设置
/*
* 开始前先运行arc_sin_init(),生成tab_arc_sin数据表
* 通过设置细分DIV的值设置运算的精度
* 调用arc_sin()得到反正弦函数的值
* 注意:1、这里只是提供一种方法,不保证程序的正确性和可行性
* 2、将DIV的值设为2的幂,如(2^7=128),angle*N可由移位得到,提高计算效率
*/
void arc_sin_init(void){
unsigned int n;
unsigned int N = DIV;
float tab_arc_sin[N];
for(n=0;n<N;n++){
tab_arc_sin[n]=arcsin((float)(n/N));
}
}
float arc_sin(float angle){ //-1<=angle<=1
if(angle>=0){
return(tab_arc_sin[unsigned int(angle*N)]);
}else{
return(tab_arc_sin[unsigned int(-angle*N)]);
}
}
复制代码
补充内容 (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