任何复杂的几何图形都是由基本图形元素(点、线等)组成的,直线等基本图形生成的关键是如何利用算法及数学公式描述并在图形设备上显示出来。
1. 直线的绘制
平面直线由两个端点唯一确定,绘制直线函数的一般表达式为:
- line(y1, x1, y2, x2, <属性参数>)
在图形设备上绘制直线,实质上就是按照直线的延伸方向( y2−y1x2−x1 )不断地生成光点所连成的轨迹或绘出微小的线段,光点的间距及绘图笔移动的距离称为步长。那么,直线的绘制算法有许多种,下面主要介绍两种,即逐点比较法和 DDA 算法。
逐点比较法
位置偏差的判别方法:图中OA是要生成的直线的理论位置,起点是O,终点是A,设当前实际画出的点位置为X轴上的一点1,斜率等于零且小于α,可以判定下一步进的方向为Y的正方向。设前进一个步距的点为B,OB的斜率为β,如果β>α,则有tanβ>tanα,这说明OB线位于OA线的上面,判定下一次步进应在X轴方向;如果β<α,那么tanβ&l;tanα,说明OB线位于OA线的下面,下一次步进应沿Y轴方向步进。
tanβ−tanα=yBxB−yAxA=xA⋅yB−xB⋅yAxB⋅xA
当直线位于第一象限时, xA,xB>0 ,因而可以用下式判别 B 点的位
置偏差, Δ=xA⋅yB−xB⋅yA
当 Δ≥0 ,在 X 轴方向绘制一个单位步长,xi+1=xi+I
当 Δ<0 ,在 Y 轴方向绘制一个单位步长,yi+1=yi+I DDA 算法
DDA 算法根据直线的微分方程来绘制直线,设直线的起始坐标 xs,ys ,终点坐标为 xe,ye ,则 Δx=xe−xs,Δy=ye−ys ,则要绘制的直线的微分分方程为 Δx=dxdt,Δy=dydt ,令 Δt=max(Δx,Δy) ,取时间步长为 1Δt ,可得上述微分方程的递推公式: