计算机图形学 之 中点画线算法

之前我们使用DDA来画线, 这种算法每步只进行一个加法运算,那么加法运算李里边有浮点数, 我们是否还可以再提高效率 也就是把浮点运算变成整数加法, 或者改变直线方程类型

中点画线算法

利用直线的一般方程 Ax + By + C = 0
在这里插入图片描述
对于一般直线方程,
对于直线的点, 那么 Ax + By + C = 0
对于直线上方的点, 那么 Ax + By + C > 0
对于直线下方的点, 那么 Ax + By + C < 0

每次在最大位移方向走一步, 另一个方向走还是不走,取决于中点误差的判断

假设 0 <= |k| <= 1. 因此,每次在x方向+1, y方向 是否加一需要作出判断
在这里插入图片描述
对于该直线, xi的位置则是 取pi, 因为交点在 yi 到y (i+1) 的中点的下方, 下一个点则是取 pu 这个点, 因为交点在中点上方

至于如何判断中点是在直线的上方还是下方
我们就把中点坐标带入到直线方程判断是否大于零, 假设中点坐标是m, 那么就是判断
di = Amx + Bmy +C 的大小, 也就是

di = A(xi + 1) + B (yi + 0.5) + C
在这里插入图片描述

中点画线算法需要 四个加法,两个乘法,似乎效率也并没有多高

增量计算

1. d < 0

在这里插入图片描述
在这里插入图片描述
推导可得, d1 = d0 + A + B

2. d >= 0

在这里插入图片描述
推导 d1 = d0 + A

3. 计算初始值d0

在这里插入图片描述
在这里插入图片描述
d0 = A + 0.5B
由于这里还是有0.5这个计算, 而且我们只需要判断d的正负号, 所以我们可以用2d来代替d计算
也就是2d0 = 2A + B这样就全都是整数了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值