如何在窗口中画直线

  • 如何画直线,看起来似乎很简单,拿个直线方程,遍历X求出Y,再把对应点画出来不就行了么,嘿嘿,没那么简单~

    平时我们所说的直线是在实数域的,也就是说对应的Y可能是小数,而在屏幕上,所画直线是基于正整数域的,那么根据直线方程如何画直线呢?

    先考虑斜率 0 < k < 1的情况

    1.Bresenham算法

    该算法由Bresenham在1965年发明,它到底做了什么事呢?其实想法很简单,就是每X移动一个像素,则考虑Y应该是如何移动。

    由于由(x0,y0),(x1,y1)两点构成的直线方程为:

    y-y0 = (y1-y0)/(x1-x0) * (x-x0)

    对于每一点的x值其y为:

    (y1-y0)/(x1-x0) * (x-x0) + y0

    可见并非每一点x对应的y都为整数,所以没有必要去计算每一点x对应的y值,只需求出哪一点的x值导致y值+1,如果x尚未到此值,则这中间的x对应的y都不变。

    如何找到这个值则要依靠直线方程斜率k,x每增加1个单位,y值都增加k个单位,而每一个x的像素点都对应一个误差,为直线中根据x求得的y与x的像素点y的差,如果误差绝对值>0.5则表示其靠近下一个像素点的y,此时把y+1,误差值-1。

    2.伪代码

    drawline(x0,y0,x1,y1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值