Bresenham直线算法 简介

Bresenham直线算法


       在射击类游戏开发中经常会遇到“物体(如子弹)直线飞行问题”,即:已知物体的起点与终点,如何计算出物体的直线运动路径,当然,这里的物体位置大多是整数。查了几篇帖子,原来这是计算机图形学中的一个经典算法--Bresenham直线算法。

 

       几篇帖子收集总结一下,主要来源是 http://en.wikipedia.org/http://www.koders.com/

 

The Bresenham line algorithm is an algorithm which determines which points in an n-dimensional raster should be plotted in order to form a close approximation to a straight line between two given points. It is commonly used to draw lines on a computer screen, as it uses only integer addition, subtraction and bit shifting, all of which are very cheap operations in standard computer architectures. It is one of the earliest algorithms developed in the field of computer graphics. A minor extension to the original algorithm also deals with drawing circles.

       Bresenham直线演算法是用来描绘由两点所决定的直线的算法,它会计算出一条线段在 n 维光栅上最接近的点。这个演算法不适用浮点数计算,而只用到较为快速的整数加法、减法和位元移位,常用于绘制电脑画面中的直线。是计算机图形学中最先发展出来的经典算法。经过少量的延伸之后,原本用来画直线的演算法也可用来画圆。

 

算法概述

Bresenham直线演算法描绘的直线

如图为Bresenham直线演算法描绘的直线,下面简述之。


      假设我们需要由 (x0, y0) 这一点,绘画一直线至右下角的另一点(x1, y1),x,y分别代表其水平及垂直座标,并且 x1 - x0 > y1 - y0。在此我们使用电脑系统常用的座标系,即x座标值沿x轴向右增长,y座标值沿y轴向下增长。
      因此x及y之值分别向右及向下增加,而两点之水平距离为x1 ? x0且垂直距离为y1-y0。由此得之,该线的斜率必定介乎于1至0之间。而此算法之目的,就是找出在x0与x1之间,第x行相对应的第y列,从而得出一像素点,使得该像素点的位置最接近原本的线。

      对于由(x0, y0)及(x1, y1)两点所组成之直线,公式如下:

公式1

      因此,对于每一点的x,其y的值是

 

 公式2


      因为x及y皆为整数,但并非每一点x所对应

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值