图形学算法--Bresenham画直线

  上次写了一下DDA直线算法的过程和实现,但DDA算法也有一些缺点:
  主要它涉及到了实数的除法运算,效率不太高。
  今天,我介绍另外一种画直线的算法:Bresenham算法(中点画线)
  Bresenham算法的基本思想就是一步一步生成直线上的结点,可以说是生成式算法。它的优点就在于整个算法过程中全是整数运算,没有实数运算。

  

  首先假设直线的k(斜率)是 0<k<1 ,如上图所示,可以看到直线的起点是 (x1,y1) 终点是 (x2,y2) 。现在的状态是我当前点位于 (xp,yp) ,目标是计算出下一个应该画的节点,从图中可以看到,下一个点不是 P1 就是 P2 ,那怎么确定呢?很显然我们只需要计算 P1 P2 的中点 M 在直线的上侧还是下侧,如果在上侧就选 P2 ,如果在下侧就选 P1 。这样就计算得出了下一个将要画的点,然后重复上述计算过程,一个点一个点的计算出来,将直线画出。   

  上面只是简单描述了一下算法的思想,具体实现过程还有一些事情需要处理:

  1、构造一个判别式

  F(x,y)=ax+by+c  ,用于计算点到直线的距离。将起点和终点代入判别式,可以得出其参数 a=y1

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值