圆弧插补算法,请问fi4是什么。如果我想画正旋波,用这个函数圆形如何确定呢

2019-07-20 09:21发布

圆弧插补算法
液晶坐标系统如下:
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--;
}
}       
圆弧插补算法,请问fi4是什么。如果我想画正旋波,用这个函数圆形如何确定呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。