中点画线法讲解

中点画线法

基本算法:
当前象素点为(xp, yp)下一个象素点为P1 或P2设M=(xp+1, yp+0.5),为p1与p2
之中点,Q为理想直线与x=xp+1垂线的交点。将Q与M的y坐标进行比较。
当M在Q的下方,则P2 应为下一个象素点;
M在Q的上方,应取P1为下一点

在这里插入图片描述
构造判别式:d=F(M)=F(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c其中a=y0-y1,
b=x1-x0, c=x0y1-x1y0
当d<0,M在L(Q点)下方,取右上方P2为下一个象素;
当d>0,M在L(Q点)上方,取右方P1为下一个象素;
当d=0,选P1或P2均可,约定取P1为下一个象素;

若当前象素处于d³0情况,则取正右方象素P1(xp+1, yp), 要判下一个象素位置,应计算d1=F(xp+2,yp+0.5)=a(xp+2)+b(yp+0.5)=d+a; 增量为a

若d<0时,则取右上方象素P2 (xp+1, yp+1)。要判断再下一象素,则要计算
d2= F(xp+2,yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ;增量为a+b

** 画线从(x0,y0)开始,d的初值 d0=F(x0+1,y0+0.5)=F(x0, y0)+a+0.5b =a+0.5b。
可以用2d代替d来摆脱小数,提高效率**
例:用中点画线法画直线段 P1(0, 0)—P2(5, 2)
a=y1-y2=-2 b=x2-x1=5
d0=2a+b=1 d1=2a=-4 d2=2(a+b)=6
在这里插入图片描述

算法

void Midpoint Line (int x0,int y0,int x1, int y1,int color)
 {
  int a, b, d1, d2, d, x, y;
 a=y0-y1, b=x1-x0, d=2*a+b;
 d1=2*a, d2=2* (a+b);
    x=x0, y=y0;
    drawpixel(x, y, color);
    while (x<x1)
    { 
  if (d<0)       
  {
   x++, y++, d+=d2; 
  }
      else       
   {
    x++, d+=d1;
  }
      drawpixel (x, y, color);
    }  /* while */
 } /* mid PointLine */
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值