Bresenham画直线,任意斜率
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画直线,任意斜率的更多相关文章
- Bresenham快速画直线算法
现在的计算机的图像的都是用像素表示的,无论是点.直线.圆或其他图形最终都会以点的形式显示.人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已.那么计算机是如何画直线的呢,其实有比较多的算法,这 ...
- 实验一 绘制任意斜率的直线段 | 使用VS2017工具
这世界上有很多坑,注定有些坑是要填的.下面我就用VS2017使用MFC对这个课堂实验进行填坑. 一.实验目的 (1)掌握任意斜率直线段的重点 Bresenham 扫描转换算法: (2)掌握 Cline ...
- Bresenham’s algorithm( 布兰森汉姆算法)画直线
Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点.这个算法只会用到较为快速的整数加法.减法和位元移位,常用于绘制电脑画面中的直线.是计算机图形学 ...
- 《图形学》实验五:改进的Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...
- 《图形学》实验四:中点Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...
- Python使用DDA算法和中点Bresenham算法画直线
title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...
- matlab练习程序(Bresenham画线)
Bresenham画线算图形学中最基础的知识了,可惜我并没有选修过图形学,所有还是有必要熟悉一下. 上一篇用到的画线函数应该算是数值微分法,也是我最常用的一种方法,不过这种方法似乎并不是很好. 这里的 ...
- 计算机图形学DDA画线法+中点画线法+Bresenham画线法
#include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> ...
- 《C# GDI+ 破境之道》:第一境 GDI+基础 —— 第一节:画直线
今天正式开一本新书,<C# GDI+ 破镜之道>,同样是破镜之道系列丛书的一分子. 关于GDI+呢,官方的解释是这样的: GDI+ 是 Microsoft Windows 操作系统的窗体子 ...
随机推荐
- strcpy,memcpy,内存块重叠
前段时间准备面试,看了一些库函数的实现,在看到memcpy时,发现有处理source和destination所指内存有重叠的情况,而strcpy没有,特别模仿库函数写了这个函数,并进行了测试.以下是具 ...
- ASP.NET中设置一个定时器来定时更新 转
asp.net 定时器 比较少用, 中国红木网这是一个相当实用的功能,有了RSS博客镜像,就不需要在多处同时发布博客日志了.比如你同时在新浪上有自己的博客,又同时有自己的个人博客站点,那么你只需要在 ...
- Twitter 工程师谈 JVM 调优
一. 调优需要关注的几个方面 内存调优 CPU 使用调优 锁竞争调优 I/O 调优 二. Twitter 最大的敌人:延迟 导致延迟的几个原因? 最大影响因素是 GC 其他的有:锁和线程调度.I/O. ...
- Hibernate查询之Criteria查询
转自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一种比hql更面向对象的查询方式.Criteria ...
- Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...
- 在Excel里如何将多个工作簿合并到一个工作簿中
在Excel里如何将多个工作簿合并到一个工作簿中 当你必须将多个工作簿合并到一个工作簿时,你遇到过麻烦吗?最让人心烦的就是需要合并的工作簿里有很多张工作表.有人能推荐方法解决这个问题吗? 利用VBA ...
- EasyUI-页面布局
通过使用 jQuery EasyUI 可以很容易地添加 Tabs.您只需要调用 'add' 方法即可. 在本教程中,我们将使用 iframe 动态地添加显示在一个页面上的 Tabs. 当点击添加按钮, ...
- 关闭对话框,OnClose和OnCancel
我们知道,在对话框中,屏蔽ESC键自己主动退出能够选择重载OnCancel为哑函数的方法: void CXXXXDlg::OnCancel() { // TODO: Add ...
- PureMVC(JS版)源码解析(八):Proxy类
前面,我们讲了与视图相关联的Mediator类,接下来我们讲讲与数据相关联的Proxy类. 关于Proxy类的作用,在Proxy类源码中,有这么一段注释: * In PureMVC, Proxy c ...
- 使用SBT构建Scala项目
既然决定要在Scala上下功夫,那就要下的彻底.我们入乡随俗,学一下SBT.sbt使用ivy作为库管理工具.ivy默认把library repository建在user home下面. 安装SBT 在 ...