计算机图形学:直线生成算法—DDA

DDA(Digital Differential Analyzer,数字差分分析器)算法是一种基本的直线生成算法,通常用于计算机图形学中。它通过将直线划分为若干个等间隔的小线段,然后在每个小线段中选择一个像素点进行绘制,从而近似地绘制出直线。

算法步骤如下:

  1. 计算斜率: 首先计算直线的斜率,即直线在x和y方向上的变化率。斜率可以通过起点和终点的坐标差值来计算,​y2​−y1​​, x2​−x1。

  2. 选择步长: 根据斜率确定每一步在x和y方向上的增量。通常选择x方向或y方向上的增量中较大的一个作为步长。

  3. 绘制直线: 从起点开始,沿着直线的路径,依次在每个步长处选择最接近直线路径的像素点进行绘制。在DDA算法中,这些像素点的坐标是通过简单的整数增量计算得到的,因此不需要进行复杂的浮点数运算。

  4. 结束条件: 直到绘制到终点为止,算法结束。

P0(1, 1)  , P1(7, 9) :

 P0(1, 1)  , P1(8, 11) :

DDA的python代码: 

import matplotlib.pyplot as plt

def DDALine(x1, y1, x2, y2, color):
    dx = x2 - x1
    dy = y2 - y1

    # calculate steps required for generating pixels 

    steps = abs(dx) if abs(dx) > abs(dy) else abs(dy)

    # calculate increment in x & y for each steps
    Xinc = float(dx / steps)
    Yinc = float(dy / steps)

    xx = []
    yy = []

    for i in range(0, int(steps + 1)):

        xx.append(int(x1))
        yy.append(int(y1))

        # Draw pixels
        # plt.plot(int(x1), int(y1), color, )

        x1 += Xinc
        y1 += Yinc


    # parameter: marker='*', markersize=10, mfc = 'r'
    # Coordinate points marked with *
    plt.plot(xx, yy, color = 'b', linestyle='-.', linewidth = 1, marker='*', markerfacecolor = 'r', markersize = 10)

    plt.legend('DDA')
    plt.grid(True)
    plt.show()


def main():
    # Enter the value yourself
    # x = int(input("Enter X1: "))
    # y = int(input("Enter Y1: "))
    # xEnd = int(input("Enter X2: "))
    # yEnd = int(input("Enter Y2: "))\

    x = 1
    y = 1
    xEnd = 7
    yEnd = 9

    color = "r."
    DDALine(x, y, xEnd, yEnd, color)


if __name__ == '__main__':
    main()
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值