布兰森汉姆画圆matlab,Bresenham画直线,任意斜率

function DrawLineBresenham(x1,y1,x2,y2)

%sort by x,sure x1

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

if dy

p= twoDy-dx;

plot(x1,y1,'*');

hold('on');

while x1

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

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

p=twoDy+dx;

plot(x1,y1,'*');

hold('on');

while x1

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快速画直线算法

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

实验一 绘制任意斜率的直线段 &vert; 使用VS2017工具

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

Bresenham’s algorithm&lpar; 布兰森汉姆算法&rpar;画直线

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

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

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

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

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

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

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

matlab练习程序(Bresenham画线)

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

计算机图形学DDA画线法&plus;中点画线法&plus;Bresenham画线法

#include #include #include #include

《C&num; GDI&plus; 破境之道》:第一境 GDI&plus;基础 —— 第一节:画直线

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

随机推荐

javascript删除元素节点

1.删除元素父节点 function removeElement(_element){ var _parentElement = _element.parentNode; if(_parentElem ...

ES6&colon;模块简单解释

modules是ES6引入的最重要的一个特性. 以后写模块的时候就直接按照ES6的modules语法来写 ,然后用babel+browserify 来打包就行了. modules规范分两部分,一部分是 ...

JS操作css的float属性的特殊写法

使用js操作css属性的写法是有一定的规律的: 1.对于没有中划线的css属性一般直接使用style.属性名即可. 如:obj.style.margin,obj.style.width,obj.sty ...

服务管理之samba

目录 samba 1.samba的简介 2. samba访问 1.搭建用户认证共享服务器 2.搭建匿名用户共享服务器 samba 1.samba的简介 Samba是在Linux和UNIX系统上实现SM ...

redis 配置文件配置

redis的配置和使用 redis的配置的分段的 配置段: 基本配置项 网络配置项 持久化相关配置 复制相关的配置 安全相关配置 Limit相关的配置 SlowLog相关的配置 INCLUDES Ad ...

VC&plus;&plus;文件拖放

属性Accept Files 设置True,消息WM_DROPFILES 设置事件OnDropFiles void CNWiReworkDlg::OnDropFiles(HDROP hDropInfo ...

Android热修复技术总结

https://blog.csdn.net/xiangzhihong8/article/details/77718004 插件化和热修复技术是Android开发中比较高级的知识点,是中级开发人员通向高 ...

vue2&period;0 代码功能片段

1.代码片段截取 checkAll: function(flag){ this.checkAllFlag = flag; this.productList.forEach(function(value ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值