菜鸟求LCD画弧线算法....
呵呵,我只会写这么多了。。。//x0,y0圆点坐标;L1,L2起始终止角度;R半径
void Draw_arc( unsigned int x0,unsigned int y0,unsigned int L1,unsigned int L2,unsigned int R)
{
}
想来想去感觉自己的算法太.。。。太....过复杂。。
菜鸟求教。。。
希望高手指点.......
附上画圆的嘿嘿....
或许能参考上吧....
//在指定位置画一个指定大小的圆
//(x,y):圆心点
//r :半径
void Draw_Circle(u8 x0,u16 y0,u8 r)
{
int a,b;
int di;
a=0;b=r;
di=3-(r<<1); //判断下个点位置的标志
while(a<=b)
{
LCD_DrawPoint(x0+b,y0-a); //0 360~315
LCD_DrawPoint(x0+b,y0+a); //10~45
LCD_DrawPoint(x0+a,y0+b); //290~45
LCD_DrawPoint(x0-a,y0+b); //390~135
LCD_DrawPoint(x0-b,y0+a); //4180~135
LCD_DrawPoint(x0-b,y0-a); //5180~225
LCD_DrawPoint(x0-a,y0-b); //6 270~225
LCD_DrawPoint(x0+a,y0-b); //7270~315
a++;
//使用Bresenham算法画圆
if(di<0)di +=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
}
} :(自己顶一下。。别沉了!! 本人已解决,,,,,,, 从发帖到解决的时间也不是很长,兄弟看好你 :lol 为什么不贴出来算法啊啊啊啊?????
我还不会啊啊啊 啊啊
作为做技术的怎么一点分享的精神都没有。,,自己解决了都不传代码。。。我这两天刚解决。。。我给大家传!!!
/************************圆弧插补算法
液晶坐标系统如下:
0------->x
|
|
|
y
调用实例如下:
arc_chabu_area1(120,340,120,275,180,340);
arc_chabu_area2(415,145,390,110,415,100);
arc_chabu_area3(250,225,250,275,200,225);
arc_chabu_area4(250,225,300,225,250,275);
注意:调用弧线的起始和终点按逆时针方向;
参数说明:
x0,y0 圆心坐标
x1,y1 起点坐标
x2,y2 终点坐标
LCD_DrawLine(xi,yi,x,y,5);中的数字5为线宽设置。
******************************************/
void arc_chabu_area1(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
u16 x,y,xi,yi;
u8 e;
x=xi=x2;
y=yi=y2;
POINT_COLOR=GRAY;
e=abs(x2-x1)+abs(y2-y1);
while(e!=0)
{
if(fi1>=0)
{
x=xi-1;
fi1=fi1+2*(x0-xi)+1;
LCD_DrawLine(xi,yi,x,y,5);
xi=x;
e--;
}
else
{
y=yi-1;
fi1=fi1+2*(y0-yi)+1;
LCD_DrawLine(xi,yi,x,y,5);
yi=y;
e--;
}
}
}
void arc_chabu_area2(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
u16 x,y,xi,yi;
u8 e;
x=xi=x2;
y=yi=y2;
e=abs(x2-x1)+abs(y2-y1);
while(e!=0)
{
if(fi2>=0)
{
y=yi+1;
fi2=fi2+2*(yi-y0)+1;
LCD_DrawLine(xi,yi,x,y,5);
yi=y;
e--;
}
else
{
x=xi-1;
fi2=fi2+2*(x0-xi)+1;
LCD_DrawLine(xi,yi,x,y,5);
xi=x;
e--;
}
}
}
void arc_chabu_area3(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
u16 x,y,xi,yi;
u8 e;
x=xi=x2;
y=yi=y2;
e=abs(x2-x1)+abs(y2-y1);
while(e!=0)
{
if(fi3>=0)
{
x=xi+1;
fi3=fi3+2*(xi-x0)+1;
LCD_DrawLine(xi,yi,x,y,5);
xi=x;
e--;
}
else
{
y=yi+1;
fi3=fi3+2*(yi-y0)+1;
LCD_DrawLine(xi,yi,x,y,5);
yi=y;
e--;
}
}
}
void arc_chabu_area4(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
u16 x,y,xi,yi;
u8 e;
x=xi=x2;
y=yi=y2;
e=abs(x2-x1)+abs(y2-y1);
while(e!=0)
{
if(fi4>=0)
{
y=yi-1;
fi4=fi4+2*(y0-yi)+1;
LCD_DrawLine(xi,yi,x,y,5);
yi=y;
e--;
}
else
{
x=xi+1;
fi4=fi4+2*(xi-x0)+1;
LCD_DrawLine(xi,yi,x,y,5);
xi=x;
e--;
}
}
}
hookie1990 发表于 2014-5-2 15:53 static/image/common/back.gif
为什么不贴出来算法啊啊啊啊?????
我还不会啊啊啊 啊啊
去下载<计算机图形学>想画啥画啥. fi1 ...fi4是什么?
页:
[1]