struct Point
{
Point()
{
posx = 0;
posy = 0;
}
Point(int x, int y)
{
posx = x;
posy = y;
}
int posx;
int posy;
};

void bresenham(int x1, int y1, int x2, int y2, vector<Point>& path)
{
path.clear();
int dx = abs(x2 - x1);
int dy = abs(y2 - y1);

int inc_x = (x2 > x1) ? 1 : -1;
int inc_y = (y2 > y1) ? 1 : -1;

int eps = 0;

Point pos(x1, y1);
path.push_back(pos);

int x = x1;
int y = y1;
if(dx > dy)
{
for(x = x1; x != x2; x += inc_x)
eps += dy;
if((eps << 1) >= dx)
{
y += inc_y;
eps -= dx;
}
pos.posx = x;
pos.posy = y;
path.push_back(pos);
}
}
else
{
for(y = y1; y != y2; y+= inc_y)
{
eps += dx;
if((eps << 1) >= dy)
{
x += inc_x;
eps -= dy;
}
pos.posx = x;
pos.posy = y;
path.push_back(pos);
}
}

pos.posx = x;
pos.posy = y;

path.push_back(pos);
}

bresenham 算法生成直线的更多相关文章

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

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

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

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

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

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

  4. Bresenham快速画直线算法

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

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

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

  6. 直线的Bresenham算法

    在实验课上用自己的算法画直线被diss效率低 花了半天时间看了下Bresenham算法真

  7. 【转】Bresenham快速画直线算法

    一.             算法原理简介: 算法原理的详细描述及部分实现可参考: http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresen ...

  8. 利用canvas实现的中点Bresenham算法

    Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个 ...

  9. [计算机图形学]光栅化算法:DDA和Bresenham算法

    目录 一.DDA 二.Bresenham 三.绘制图形 1. 绘制直线 2. 绘制圆 3. 绘制椭圆 一.DDA DDA算法是最简单的直线绘制算法.主要思想是利用直线的斜截式:\(y=kx+b\) 对 ...

随机推荐

  1. 超简单的实现wordcount

    worcount1.0,源码参见GitHub:https://github.com/18382271904/spring_lee_flag.git

  2. Android开发 ---ORMLite实现数据的增删改查,单例模式,Dao栈

    效果图: 项目目录截图: 1.activity_main.xml 描述: 两行显示8个按钮 <?xml version="1.0" encoding="utf-8& ...

  3. 学号 20175223 《Java程序设计》第2周学习总结

    学号 20175223 <Java程序设计>第2周学习总结 教材学习内容总结 第二章要点: 要点1:标识符与关键字 要点2:基本数据类型:逻辑类型boolean,整数类型int|byte| ...

  4. phpcms 加载微信类库,生成签名

    在phpcms 中 pc_base:load_config(文件名) 用于加载配置文件,配置文件存放于phpcms目录下的caches/configs中 在控制器新增加载微信类库的方法: /** * ...

  5. 100道Java基础面试题收集整理(附答案)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  6. latex之矩阵表示

    $ \begin{matrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{matrix}\quad \begin{ ...

  7. linux基础之LSB定义的常用目录详解

    Linux基础之LSB定义的基本目录详解 1.LSB中FHS(Filesystem Hierarchy Standard)定义的一些文件 /boot:主要是存放引导文件的目录,比如内核文件(vmlin ...

  8. day05 字典

    今日内容(dict) 1.基本格式 2.独有方法 3.公共 4.强制转换 1.基本格式 字典(可变类型,3.6之后是有序) 帮助用户去表示一个事物的信息(事物是有多个属性) 键值不能为集合,列表,字典 ...

  9. 3.python集合

    1.集合1.不同元素组成2.无序排列的可hash值3.集合中元素必须是不可变类型(数字,字符串,元祖) 2.集合创建:(1)定义可变类型集合set:把里面元素一个一个进行for循环往大括号里放 set ...

  10. Linux 文件类型笔记

    在UNIX中一切都是文件https://ph7spot.com/musings/in-unix-everything-is-a-file在UNIX中,一切都是字节流 ==== linux系统的文件类型 ...