抛砖引玉,依照角度画圆的半径线,有更好的方法吗?
u16 sintr[]={
0,87,175 ,349 ,523 ,698 ,872 ,1045 ,1219 ,1392 ,1564 ,1736,
1908 ,2079 ,2250 ,2419 ,2588 ,2756 ,2924 ,3090 ,3256 ,3420,
3584 ,3746 ,3907 ,4067 ,4226 ,4384 ,4540 ,4695 ,4848 ,5000,
5150 ,5299 ,5446 ,5592 ,5736 ,5878 ,6018 ,6157 ,6293 ,6428,
6561 ,6691 ,6820 ,6947 ,7071 ,7193 ,7314 ,7431 ,7547 ,7660,
7771 ,7880 ,7986 ,8090 ,8192 ,8290 ,8387 ,8480 ,8572 ,8660,
8746 ,8829 ,8910 ,8988 ,9063 ,9135 ,9205 ,9272 ,9336 ,9397,
9455 ,9511 ,9563 ,9613 ,9659 ,9703 ,9744 ,9781 ,9816 ,9848,
9877 ,9903 ,9925 ,9945 ,9962 ,9976 ,9986 ,9994 ,9998 ,10000
}; //0~90的正弦值,扩大10000倍,共91个,
//-------------------------------------------------------------------------------
//画圆的半径线
//Draw_Circle_R
//x0,y0圆心坐标,radius 是半径,angle是角度0~360整数
//-------------------------------------------------------------------------------
void Draw_Circle_R(u16 x0,u16 y0,u8 radius,u16 angle)
{
u8 x1,y1;
if(angle<90)
{
x1=x0+sintr[angle]*radius/10000;
y1=y0-sintr[90-angle]*radius/10000;
}
else if(angle<180)
{
angle-=90;
x1=x0+sintr[90-angle]*radius/10000;
y1=y0+sintr[angle]*radius/10000;
}
else if(angle<270)
{
angle-=180;
x1=x0-sintr[angle]*radius/10000;
y1=y0+sintr[90-angle]*radius/10000;
}
else if(angle<360)
{
angle-=270;
x1=x0-sintr[90-angle]*radius/10000;
y1=y0-sintr[angle]*radius/10000;
}
LCD_DrawLine(x0,y0,x1,y1);//画任意2点间的直线
}
自己写的,读取角度传感器的角度,然后在一个圆环,从圆心出发画一段线表示角度位置。
常见的类似应用是画秒针。不过我这里精确到1度.
想偷懒,在百度上搜了半天,没找到什么简单的算法。
最后自己算好0~90的正弦值,函数自己写了