Bresenham算法

本文介绍了Bresenham算法,包括DDA画线算法、Bresenham画线算法、Bresenham画圆算法以及Bresenham画椭圆算法。这些算法通过避免浮点运算,提高效率,适用于OpenGL等图形库。通过对决策参数p的递推计算,确定了实际描点的位置,从而逼近直线、圆和椭圆的形状。

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

Bresenham算法是一系列算法。
首先我们要了解一个事实,实际的描点坐标都是整数的。而公式计算浮点的是浮点数。
算法核心思想:已知当前点坐标及曲(直)线方程,递推下一个(x+1)点的y坐标(或者(y+1)点的x坐标)。抛弃使用三角函数计算坐标,提高数据重用率。

1.DDA画线算法
核心:直线方程 y=kx+b;
当前坐标和下一个坐标的关系。
xn=xn1+1;
yn=roundyn1+k;

void DDALine(int x0,int y0,int xEnd,int yEnd)
{
    int dx = xEnd - x0;
    int dy = yEnd - y0;
    int step , k;
    float xi,yi;
    if(abs(dx)>abs(dy)) step = abs(dx);
    else step = abs(dy);//确定哪个是单位坐标。
    xi = dx/step;//假如x坐标是单位坐标,则xi为1;
    yi = dy/step;

    setPixel(x0,y0,0);//c
    //c++ MFC下:SetPixel(hdc,x0,y0,0);貌似有效率问题。
    //c++ pDC->SetPixel(x0,y0,0);
    for(k=0;k<step;k++){
        x0+=xi;
        y0+=yi;    //下一个点
        setPixel(round(x0),round(y0),0);
    }
{
  
  

2.Bresenham画线算法
核心:在DDA算法基础上,抛弃浮点运算,增加一个决策参数p(变化的)。
用公式计算的 y 和实际的描点yi,yi+1做差比较。
dlow=yyi=m(xk+1)+byi
dup=(yi+1)y=y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值