Bresenham 画线算法

Bresenham 画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用了

整数的增量来实现的。

Bresenham算法将对整形参数的符号检测,整形参数的值比于实际险段之间的偏量。

Bresenham算法内容

对于直线方程 Y = kX + b;

A,0< 斜率 < 1 时候的算法

   1,输入线段的两个端点Point1和Point2,并且存储到Point1(x1,y1)和Point2(x2,y2)中;

   2,将Point1载入桢缓存,绘画第一个起始点;

   3,计算常量△x、△y、2△y和2(△y-△x),并且获得一个决策参数的第一个值:P = 2△y - △x;

   4,从n = 0开始,在沿线经过每个Xn处,进行下面的监测:

        如果Pn< 0, 下一个点绘制的是(Xn+1,yn),并且Pn+1= Pn + 2△y

        如果P0>= 0 ,下一个点绘制的是(Xn+1,Yn+1),并且Pn+1 = Pn + 2(△y-△x)

    5,重复执行△x-1次步骤4;

关于在C++中的算法如下实例:

#include <iostream>

using namespace std;

void Bresenham(int x1,int y1,int x2,int y2){

int dx = x2 - x1;//△x

int dy = y2 - y1;//△y

int p = (2*dy) - dx ; //P = 2△y - △x

int dobDy = 2* dy ; // 2 △y

int dobD = 2*(dy - dx) ; // 2(△y - △x)

int PointX,PointY;

//设置两个临时用来显示位置的变量

 

if( x1 > x2){ //判断线段的方向

PointX = x2;//起始坐标X

PointY = y2;起始坐标Y

x2 = x1;

}

else{

PointX = x1;//起始坐标X

PointY = y1;//起始坐标Y

}

//达因第一个起始点

cout<<"Point: X:"<<PointX<<" Y:"<<PointY<<endl;

while(PointX<x2){

PointX++;

if(p < 0){

p += dobDy;

}

else{

PointY++;

p += dobD;

}

cout<<"Point: X:"<<PointX<<" Y:"<<PointY<<endl;

}

}

int main(){

//绘画线段(2,2点到(60,50)需要的点

Bresenham(20,10,30,18);

return 0;

}

 

 

B,斜率 k = 1 或这斜率 k = 0 时候的算法

 对于斜率=0或者斜率=1时候,不需要通过算法直接的对于其中单一坐标变量进行处理就可以。

 

C, 斜率 k < 0 的情况算法

将起始点和中止点坐标Point1和Point2交换,可以转化到斜率为0和1之内的算法去实现。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhihualee/archive/2006/06/06/776012.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值