1、DDA(Digital Differential Analyzer)算法
DDA算法是计算机图形学中最简单的绘制直线算法。
已知直线段两个端点P0(x0,y0),P1(x1,y1)。
则可求得直线的斜率:
k = (y2 - y1) / (x2 - x1)
在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。
y = kx + b
如果横坐标x每次增加1(我们称其为步进为1,即x = x +1),那么y的步进就为k+b。
x = x + 1
y = y + (k + b)
同样知道一个y值也能计算出x值,此时y的步进为1,x的步进为(1-b)/k。
y = y + 1
x = x +(1 - b) / k
根据计算出的x值和y值,向下取整,得到坐标(x’,y’),并在(x’,y’)处绘制直线段上的一点。
为进一步简化计算,通常可令b取0,将起点看作(0,0)。
设当前点的坐标为(xi ,yi),下一个像素点的坐标为(xi+1,yi+1)
则用DDA算法求解(xi+1,yi+1)的计算公式可以概括为:
xi+1 = xi + xStep (1)
yi+1 = yi + yStep (2)
我们一般通过计算 Δx 和 Δy 来确定xStep和yStep:
如果 Δx > Δy ,说明x轴的最大差值大于y轴的最大差值,x轴方向为步进的主方向,
xStep = 1,yStep = k;
如果 Δy> Δx,说明y轴的最大差值大于x轴的最大差值,y轴方向为步进的主方向,
yStep = 1,xStep = 1 / k。
根据这个公式,就能通过(xi,yi)迭代计算出(xi+1、yi+1),然后在坐标系中绘制计算出的(x,y)坐标点。
实现工具:
1) VS2019(C++)
新建项目:
2) 下载插件:Easyx 。使用方法和下载见官网: https://www.easyx.cn/
点击下载后安装
在VC2019处点击安装
源代码如下:
#include <iostream>
#include <graphi