这篇文章中我们简单介绍 DDA (Digital differential analyzer :数值微分法),它根据直线的微分方程来绘制直线,是最简单的一种画线方法。
设直线的起点坐标为 Ps(xs,ys) ,终点坐标为Pe(xe,ye) ,令 Δx=xe−xs,Δy=ye−ys ,则要绘制的直线微分方程为
dxdt=Δx,dydt=Δy将上式中的微分用差商来代替,即得:
xi+1−xiti+1−ti=Δx,yi+1−yiti+1−ti=Δy令 Δm=max(|Δx|,|Δy|) ,取时间步长为 t2−t1=1/Δm ,则每走一步,可得微分方程数值解得递推公式为
xi+1=xi+Δx/Δm,yi+1=yi+Δy/Δm根据此公式,即可简单的推出我们我们下一步的像素坐标,转换为代码如下:
1 | void DrawLineDDA(int x1 , int y1 , int x2 , int y2 , |
在我们的主循环中调用这个方法绘制两条斜线,如下:
1 | while (!glfwWindowShouldClose(pWindow)) { |
最终效果:
参考资料 :《计算机图形学基础(OpenGL版)》