实验一 实现改进Bresenham算法

实验一 实现改进Bresenham算法

一、目的

1. 了解直线生成基本原理和常用方法。
2. 掌握改进Bresenham算法的基本原理和步骤。
3. 使用C++、OpenGL编程实现如下内容:输入线段的起始点和终止点坐标位置,利用改进Bresenham算法交互式绘制直线段。

二、实验设备

编程语言:C++、OpenGL
实验环境:已安装相关编程环境的计算机1台。

三、算法原理

基本原理:每次在最大位移方向上走一步,而另一个方向上走还是不走取决于误差项的判断。
步骤:
在0≤k≤1情况下改进的Bresenham算法∶
(1)输入直线的两端点Po(Xo,yo)和P1(X,yi)。
(2)计算初始值△x、^y、e=-4x、X=x、y=yo。
(3)绘制点(x,y)。
(4) e更新为e+2△y
判断e的符号
若e>0,则(x.y)更新为(x+1,y+1),同时将e更新为e-24x;否则(x,y)更新为(x+1,y)。
(5)当直线没有画完时,重复步骤3和4。否则结束。

四、算法实现及结果分析

#include <gl/glut.h>
#include <math.h>
#include<iostream>
using namespace std;

void ProBresenham(int x0, int y0, int x1, int y1)    //改进的Bresenham算法
{ 
	int x, y, dx, dy, e;
	dx = x1 - x0;
	dy = y1 - y0;
	e = -dx;
	x = x0;
	y = y0;
	while (x <= x1) {
		glBegin(GL_POINTS);
		glVertex2i(x, y);
		glEnd();
		x++;
		e = e + 2 * dy;
		if (e > 0) {
			y++;
			e = e - 2 * dx;
		}
	}
}
void Display()    //显示函数
{
	int x0, y0, x1, y1;
	glClear(GL_COLOR_BUFFER_BIT);    //清空颜色堆栈
	cout<<"请输入直线起点与终点坐标"<<endl;
	cin >> x0 >> y0 >> x1 >> y1;
	ProBresenham(x0, y0, x1, y1);//画直线
	glFlush();    //清空缓冲区指令
}
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);    //初始化显示模式
	glutInitWindowSize(600, 600);    //设置窗口尺寸
	glutInitWindowPosition(200, 100);    //设置窗口位置
	glutCreateWindow("改进Bresenham算法");    //创建窗口
	glutDisplayFunc(Display);    //注册显示函数
	glClearColor(1.0f, 1.0f, 1.0f, 1.0f);    //设置背景颜色,完全不透明
	glColor3f(1.0f, 0.0f, 0.0f);    //设置画笔颜色
	glMatrixMode(GL_PROJECTION);            //设置投影
	gluOrtho2D(0.0, 600, 0.0, 600);    //设置投影区域
	glutMainLoop();    //进入程序循环
	return 0;

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值