博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab练习程序(Bresenham画线)
阅读量:6240 次
发布时间:2019-06-22

本文共 1463 字,大约阅读时间需要 4 分钟。

Bresenham画线算图形学中最基础的知识了,可惜我并没有选修过图形学,所有还是有必要熟悉一下。

用到的画线函数应该算是数值微分法,也是我最常用的一种方法,不过这种方法似乎并不是很好。

这里的画线方法比上一种方法好。

算法原理如下:

过各行各列象素中心构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列象素中与此交点最近的象素。

该算法的巧妙之处在于采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求象素。

更细节的原理。

随机画出的一些线:

matlab代码如下:

main.m

clear all;close all;clc;h=256;w=256;img=zeros(h,w);for i=1:100    x1=round(rand()*(w-1))+1;    y1=round(rand()*(h-1))+1;    x2=round(rand()*(w-1))+1;    y2=round(rand()*(h-1))+1;    img=BresenhamDraw(img,x1,y1,x2,y2);    figure(1);    imshow(img,[])end

BresenhamDraw.m

function img=BresenhamDraw(img,x1,y1,x2,y2)     if x1~=x2        k=(y2-y1)/(x2-x1);        flag=0;         %斜率判断标记位        if abs(k)>1     %如果斜率大于1,则把x和y方向置换            flag=1;            k=1/k;            [y1 x1]=Swap(x1,y1);            [y2 x2]=Swap(x2,y2);        end                %计算开始画线的像素                    mi=min(x1,x2);              ma=max(x1,x2);        if mi==x1            s=y1;         else            s=y2;        end                d=0;        for i=mi:ma            if flag==0                img(s,i)=1;            else                img(i,s)=1;             end            d=d+k;             %自变量i每加1,根据d是否超过一个像素来确定因变量s增加或减少            if d>=1                d=d-1;                s=s+1;            elseif d<=-1                d=d+1;                s=s-1;            end             end     endend

Swap.m

function [y x]=Swap(x1,y1)    x=y1;    y=x1;end

 

转载于:https://www.cnblogs.com/tiandsp/p/3960271.html

你可能感兴趣的文章
mysql如何分表mysql分表的3种方法比较优点缺点
查看>>
linux平台上的扫描技术Nmap
查看>>
ACMjlb入门题 1034
查看>>
ansible-playbook批量部署安装tomcat
查看>>
ansible安装配置(一)
查看>>
好程序员web前端分享js剪切板Clipboard.js 使用
查看>>
centos6.5下使用lnmp架构安装nextcloud云盘
查看>>
ubuntu 删除旧内核
查看>>
TT/TC安装和简单使用
查看>>
Android利用drawable文件夹自定义控件背景、样式
查看>>
深入oracle 12c数据库备份与恢复(优化RMAN性能、Oracle flashback技术)
查看>>
【华为ACL】禁止某网段上网
查看>>
Linux启动的顺序说明
查看>>
5月15日
查看>>
DDoS***&防御[精品文章100篇]
查看>>
要学学好习一下mysql了
查看>>
linux 当路由器使用
查看>>
Exchange系列—配置传输规则
查看>>
1.3.1原文件声明规则
查看>>
Linux下搭建无人执守安装服务器
查看>>