function DrawLineBresenham(x1,y1,x2,y2)
%sort by x,sure x1<x2.
if x1>x2
tmp=x1;
x1=x2;
x2=tmp;
tmp=y1;
y1=y2;
y2=tmp;
end
dx=x2-x1;
dy=y2-y1;
twoDy=2*dy;
twoDy_Dx=2*(dy-dx);
twoDx=2*dx;
twoDx_Dy=2*(dx-dy);
twoDxPlusDy=2*(dx+dy);
%branch 1: k>0 ?
%k>0 <=> dy>0 if dy>0 %k>0
if dx==0 %if k==INF
for i=y1:y2
plot(x1,i,'*');
hold('on');
end
return ;
end
%branch 2:k=INF %branch 3: k<1 <=> dy<dx
if dy<dx %k<1
p= twoDy-dx;
plot(x1,y1,'*');
hold('on');
while x1<x2
x1=x1+1;
if(p<0)
p=p+twoDy;
else
y1=y1+1;
p=p+twoDy_Dx;
end
plot(x1,y1,'*');
hold('on');
end elseif dy>dx %k>1
p =dy;
plot(x1,y1,'*');
hold('on');
while y1<y2
y1=y1+1;
if p<0
p=p+twoDx;
else
x1=x1+1;
p=p+twoDx_Dy;
end
plot(x1,y1,'*');
hold('on'); end else %k==1 for i=x1:x2
plot(i,y1-x1+i,'*');
hold('on');
end
end elseif dy<0 %k<0
if dx==0 %if k==INF
for i=y2:y1
plot(x1,i,'*');
hold('on');
end
return ;
end
if dx+dy>0 %-1<k<0
p=twoDy+dx;
plot(x1,y1,'*');
hold('on');
while x1<x2
x1=x1+1;
if p<0
y1=y1-1;
p=p+twoDxPlusDy;
else
p=p+twoDy;
end
plot(x1,y1,'*');
hold('on');
end
elseif dx+dy<0 %k>-1
p=twoDx-dy;
plot(x1,y1,'*');
hold('on');
while y1>y2
y1=y1-1;
if p<0
x=x+1;
p=p-twoDxPlusDy;
else
p=p-twoDx; end
plot(x1,y1,'*');
hold('on');
end else %k==-1
for i=x1:x2
plot(i,y1+x1-i,'*');
hold('on');
end end else %k==0 for i=x1:x2
plot(i,y1,'*');
hold('on');
end end % y2=flag*y2;
% y1=flag*y1;
% dx=(x2-x1);
% dy=(y2-y1);
% d=[];
% d(1)=2*dy-dx;
% DoubleDy=2*dy;
% DoubleDy_x=2*(dy-dx);
% x=[];
% y=[];
% x(1)=x1;
% y(1)=y1;
% for i=2:10
% x(i)=x(i-1)+1;
% if d(i-1)<0
% d(i)=d(i-1)+DoubleDy;
% y(i)=y(i-1);
% else
% d(i)=d(i-1)+DoubleDy_x;
% y(i)=y(i-1)+1;
% end
% end
% grid on
% plot(x,y,'*');
% grid on
% hold on
% k1=(y2-y1)/(x2-x1);
% b=y2-k1*x2;
% x_a=x1:0.1:x2;
% y_a=k1*x_a+b;
% plot(x_a,y_a);
% title('Bresenham画直线算法');
end

Bresenham画直线,任意斜率的更多相关文章

  1. Bresenham快速画直线算法

    现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这 ...

  2. 实验一 绘制任意斜率的直线段 | 使用VS2017工具

    这世界上有很多坑,注定有些坑是要填的.下面我就用VS2017使用MFC对这个课堂实验进行填坑. 一.实验目的 (1)掌握任意斜率直线段的重点 Bresenham 扫描转换算法: (2)掌握 Cline ...

  3. Bresenham’s algorithm( 布兰森汉姆算法)画直线

    Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点.这个算法只会用到较为快速的整数加法.减法和位元移位,常用于绘制电脑画面中的直线.是计算机图形学 ...

  4. 《图形学》实验五:改进的Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...

  5. 《图形学》实验四:中点Bresenham算法画直线

    开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...

  6. Python使用DDA算法和中点Bresenham算法画直线

    title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...

  7. matlab练习程序(Bresenham画线)

    Bresenham画线算图形学中最基础的知识了,可惜我并没有选修过图形学,所有还是有必要熟悉一下. 上一篇用到的画线函数应该算是数值微分法,也是我最常用的一种方法,不过这种方法似乎并不是很好. 这里的 ...

  8. 计算机图形学DDA画线法+中点画线法+Bresenham画线法

    #include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> ...

  9. 《C# GDI+ 破境之道》:第一境 GDI+基础 —— 第一节:画直线

    今天正式开一本新书,<C# GDI+ 破镜之道>,同样是破镜之道系列丛书的一分子. 关于GDI+呢,官方的解释是这样的: GDI+ 是 Microsoft Windows 操作系统的窗体子 ...

随机推荐

  1. [ZETCODE]wxWidgets教程八:组件专题1

    本教程原文链接:http://zetcode.com/gui/wxwidgets/widgets/ 翻译:瓶哥 日期:2013年12月12日星期四 邮箱:414236069@qq.com 主页:htt ...

  2. PHP配置图文教程

    组合解释:lamp,其英文译为灯,可以方便记忆.其实每个字母代表的是一个英文缩写.l-->Linux,a-->Apache,m-->MySql,p-->PHP 由于以上资源都是 ...

  3. 读取txt正则匹配行写入txt

    StreamReader sr = new StreamReader("C:\\Users\\Administrator\\Desktop\\blogbbs\\dd.txt",En ...

  4. myeclipes使用过程中的错误解决方案

    1.‘Building workspace’ has encountered a problem. Errors occurred during the build. 解决方案:这样的错误,主要是由于 ...

  5. nodejs保存文件的问题

    从前端到那里jar包失败: 保存到本地管理机jar包md5sum上传正确的值md5sum值不相等.并上传 处理 没有错误,说明保存过程中的错误: 前面是base64然后转码后jar包内容放进reque ...

  6. ubuntu下linux内核源码阅读工具和调试方法总结

    http://blog.chinaunix.net/uid-20940095-id-66148.html 一 linux内核源码阅读工具 windows下当然首选source insight, 但是l ...

  7. RFC 文档(中文与英文)

    http://man.chinaunix.net/develop/rfc/default.htm https://www.rfc-editor.org/retrieve/ http://www.iet ...

  8. cocos2d-x Lua与OC互相调用

    1. Lua 调用OC 先看例子: hello.lua: -- 点击回调函数 local function notifymenuCallbackTest() local luaoc = require ...

  9. thinking in java 读书笔记 --- overriding private method

    一个对象可以被用作它自身的类型或者是它的基类类型.当用作它的基类类型时叫做upcasting,如下所示 BaseClass ref = new DerivedClass()  //upcasting ...

  10. Hadoop 2.6.3运行自带WordCount程序笔记

    运行平台:Hadoop 2.6.3 模式:完全分布模式 1.准备统计文本,以一段文字为例:eg.txt The Project Gutenberg EBook of War and Peace, by ...