常用直线图形生成算法(一)

本文介绍了三种常用的直线图形生成算法:逐点比较法、数值微分法(DDA)和中点画线法。逐点比较法易于理解但存在锯齿问题;DDA法能画出较平滑直线,但效率不高;中点画线法兼顾效率和平滑度,通过计算中点位置决定下一步走向。
摘要由CSDN通过智能技术生成

常用直线图形的生成算法

1、逐点比较法

在绘图的过程中,绘图笔每走一步就与规定的图形进行偏差比较,然后决定下一步的走向,所以算法的核心在于步进之后的偏差比较
逐点比较法的执行过程可用下面的流程图来表示:

Created with Raphaël 2.1.0 开始 偏差判别 笔画走步 已达终点? 结束 偏差计算 yes no
走向规定

对于一般的绘图机,画笔在平面的走向只有水平和垂直方向,所以规定走向为X方向和Y方向。

偏差计算(以0~90°的直线为例)

为了简化起见,直线的起点都固定在坐标系原点,实际实现时,对于任意直线可做坐标系变换,将坐标原点移到起点

参数:所画直线的斜率,作为计算偏差的原始参数
定义:目标直线的与X轴的夹角为α,画笔当前点与原点连线与X轴的夹角为β
偏差值: Δ=tan(β)tan(α)
Δ<0 时,笔当前的位置在直线的下方,下一步向+Y的方向走一步
Δ0 时,笔当前的位置在直线的上方,下一步向+X的方向走一步

用递推法简化偏差的计算

为了简化计算提高性能,实际算法实现时,常常使用递推法计算偏差。

定义: A(xA,yA) 是目标直线的终点, P(xP,yP) 是当前画笔的坐标。
所以上面提到的 Δ=(xAypxpyA)/xPxA
分母恒正,所以只要考虑分子的符号。

  • 当下一步为+Y

    x2=x1,y2=y1+1
    代入之后,与之前的偏差进行比较,增量为 xA

  • 当下一步为+X

    x2=x1+1,y2=y1
    代入之后,与之前的偏差进行比较,增量为 yA

于是我们可以省去每步都进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值