逐点比较法详细注释

void printline(int x1,int y1,int x2,int y2,int color) //输入起点终点的坐标信息,及color
{
int x,y xA,yA; //定义xy为画线时的临时变量 xAyA为平移后的终点坐标
if(y1 > y2) //判断哪一个点是较小的点,将较小的点移动到原点,较大的点xy坐标均减去较小的点的xy坐标大小
{ yA = y1 - y2; xA = x1- x2; }
else
{ yA = y2 - y1; xA = x2 - x1; }

int F = x = y = 0; //定义F变量为衡量画线方向的变量
int n = abs(xA )+abs(yA); //n代表画出这条线一公需要xy移动的次数

for(int i = 0;i <n ; i++) //画n次
{
if(xA > 0) //如果斜率是大于0的,即在第一象限上时 F= xiy末 - x末yi
{
if(F >= 0) //在第一象限时候因为将起点移动到原点,所以一定是从F = 0开始画点的
{x++;F=F-xA;}//x向右移动一个单位 ,新得F根据公式(x (i+1)= x(i)+1,y(i+1) = y(i))
else{y++;F+=xA;} //当F变量为负值时代表此时应该y向上移动一个单位,此时新得F应该根据公式(x (i +1)= x(i),y(i+1) = y(i))
}
else // 斜率小于零的,即在第二象限时
{
if( F >= 0)
{y++;F = F +yA;}
else
{x–;F = F+yA;}
}
//因为上述的xy都是在移动过需要画线的那条线段的新信息下产生的xy,所以要画出来原线就要将xy+回原来减去的那个较小的原坐标
if(y1 > y2)
{setpixel(x + x2,y +y2,color);}
else
{setpixel(x + x1,y +y1,color);}

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值