《计算机图形学》学习笔记(三)画线算法

本文介绍了三种画线算法:DDA算法,中点画线算法和Bresenham算法。DDA算法通过增量计算实现,适用于|k|<=1的情况。中点画线算法通过判断中点位置决定下一点的选择。Bresenham算法利用误差修正策略,避免了浮点运算,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

画线算法:已知点A(x1,y1)和点B(x2,y2),画出点A和点B之间的所有的点。

1、DDA(数值微分)算法

已知直线方程可以表示为 y = kx + b
以下公式仅考虑 |k|<=1(这种情况下,直线在y轴方向增长的速度小等于在x轴方向的速度)
已知:
y1 = kx1 + b
y2 = kx2 + b
因为
x2 = x1 + 1
所以
y2 = k(x1 + 1) + b
y2 - y1 = k(x1 + 1) + b - (kx1 + b) = k
可以推导出,x,每递增1,y递增k

增量算法
在一个迭代算法中,如果每一步中的x和y值均由上次计算得到的值加上一个增量来得到,这种算法为增量算法。
DDA算法是一种增量算法,在 |k|<=1 的情况下,Δx =1,Δy = k。
实现代码如下

void DrawLine_DDA(int x1,int y1,int x2,int y2){
   
    int dx = x2 - x1;
    int dy = y2 - y1;

    int step = 0;
    if(Math.Abs(dy) > Math.Abs(dx)){
   
        step = Math.Abs(dy);
    }
    else{
   
        step = Math.Abs(dx);
    }

    float stepX = 1.0f * dx / step;
    float stepY = 1.0f * dy / step;

    int i = 0;
    float x = x1;
    float y = y1;
    DrawPoint((int)x, (int)y);
    while ((i++)<step){
   
        x += stepX;
        y += stepY;
        DrawPoint((int)x, (int)(y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值