• 即将更新图形学,编译原理,机器学习等文章,谢谢关注~
  • 由于算法限制,搜索时注意简化关键字,谢谢支持~
  • 网站不兼容IE5.0及以下,请使用主流浏览器访问.
  • OpenGL数值微分法(DDA)画直线

    DDA算法,是计算机图形学中一种基于直线的微分方程来生成直线的方法,由于有浮点数运算与取整,该算法不利于硬件实现。

    其主要思想是由直线公式y = kx + b推导出来的。
    我们已知直线段两个端点P0(x0,y0)和P1(x1,y1),就能求出 k 和 b 。

    在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。如果x的步进为1(x每次加1,即x = x +1),那么y的步进就为k+b;同样知道一个y值也能计算出x值,此时y的步进为1,x的步进为(1-b)/k。根据计算出的x值和y值,向下取整,得到坐标(x’,y’),并在(x’,y’)处绘制直线段上的一点。

    为进一步简化计算,通常可令b取0,将起点看作(0,0)。设当前点为(xi, yi)则用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)坐标点。

    C++代码:

    效果图:

    参考资料:https://blog.csdn.net/u010429424/article/details/77834046?utm_source=copy

    读者评分
    [评分人数: 1 平均分: 5]

    评论

    OmegaXYZ