早教吧 育儿知识 作业答案 考试题库 百科 知识分享

Bresenham中点算法,若斜率大于1若斜率大于1,那么就是y方向为主位移方向,以后的点y坐标每次必定加1,x坐标看中点偏差判别式?另:如果上面成立,那么当d=0,y(i+1)=yi还成立不,还是反过来?

题目详情
Bresenham中点算法,若斜率大于1
若斜率大于1,那么就是y方向为主位移方向,以后的点y坐标每次必定加1,x坐标看中点偏差判别式?
另:如果上面成立,那么当d=0,y(i+1)=yi 还成立不,还是反过来?
▼优质解答
答案和解析
成立,应该反过来,根据d的判读给x加1或者不加1.
下面是我编写的一个在12864上画线的函数,可以画任意方向的线段.但先要有一个画点函数:Lcd_PutPixel(x,y,1).
line(int x0,int y0,int x1,int y1)
{
int i,dx,dy,e,x,y;
Lcd_PutPixel(x0,y0,1);
Lcd_PutPixel(x1,y1,1);
dx=x1-x0;
dy=y1-y0;
x=x0;
y=y0;
if(dx>0&&dy>0)
{
if(dx>dy)
{
e=-dx;
for(i=0;i=0)
{
y++;
e=e-2*dx;
}
}
}
else
{
e=-dy;
x=x0;
y=y0;
for(i=0;i=0)
{
x++;
e=e-2*dy;
}
}
}
}
if(dx0&&dydy)
{
e=-dx;
for(i=0;i=0)
{
y--;
e=e-2*dx;
}
}
}
else
{
e=-dy;
for(i=0;i=0)
{
x++;
e=e-2*dy;
}
}
}
}
if(dx0)
{
dx=x0-x1;
if(dx>dy)
{
e=-dx;
for(i=0;i=0)
{
y++;
e=e-2*dx;
}
}
}
else
{
e=-dy;
for(i=0;i=0)
{
x--;
e=e-2*dy;
}
}
}
}
if(dx!=0&&dy==0)
{
if(dx>0)
{
for(i=0;i