实验一 实现改进Bresenham算法

2023-10-29

实验一 实现改进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;

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验一 实现改进Bresenham算法 的相关文章

  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • 计算机图形学(Computer Graphics)有哪些SCI期刊推荐? - 易智编译EaseEditing

    以下是计算机图形学领域的几个重要SCI期刊 xff1a ACM Transactions on Graphics TOG xff1a 是计算机图形学领域最重要的SCI期刊之一 xff0c 由ACM xff08 Association for
  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自定义光标,QQ截图时的光标

    本实例全部文章目录 一 功能概览 二 创建项目 注册热键 显示截图主窗口 三 托盘图标及菜单的实现 四 基本截图功能实现 五 针对拖拽时闪烁卡顿现象的优化 六 添加配置管理功能 七 添加放大镜的功能 八 添加键盘操作截图的功能 九 使用自定
  • unity三种图片格式

    本文转载自 http blog csdn net caption deng article details 52366907 ARGB 是一种色彩模式 也就是RGB色彩模式附加上Alpha 透明度 通道 常见于32位位图的存储结构 RGB
  • 实验一 实现改进Bresenham算法

    实验一 实现改进Bresenham算法 一 目的 1 了解直线生成基本原理和常用方法 2 掌握改进Bresenham算法的基本原理和步骤 3 使用C OpenGL编程实现如下内容 输入线段的起始点和终止点坐标位置 利用改进Bresenham
  • games101笔记 Shading

    什么是shading 不同的物体应用不同的材质的过程 就是计算出物体具体应该在的地方 物体的光照 物体本身应该有的材质 Blinn Phong Reflectance Model Blinn Phong反射模型 Blinn Phong Re
  • 几何检测

    概述 几何检测主要相交性检测 这里的内容大体上是根据 3D数学基础 图形与游戏开发 这本书来的 对于这本书来说 这一部分看完了后面内容就不看了 因为后面讲的太空泛了 有点像一本绝世武功的目录一样 看似很强 其实没什么卵用 1 2D隐式直线上
  • OPENGL学习(一)认识OPENGL和各种库

    认识OPENGL和各种库 opengl 本身是一种标准 告诉你如何一个图形库需要哪些函数 真正这些函数是不同显卡厂商提供的 glu The OpenGL Utility Library OPENGL实用库 就是对OPENGL的更高级的封装
  • GDI+学习笔记1- 概述

    一 图形概述 Windows 窗体 GDI 是构成 Microsoft Windows 操作系统子系统的应用程序编程接口 API GDI 负责在屏幕和打印机上显示信息 顾名思义 GDI 是 GDI 的后续 后者是包含在 Windows 早期
  • 《计算机图形学》微课版 孔令德 三、填充多边形 期末复习

    多边形的定义 多边形是由折线段组成的平面封闭图形 凸多边形 含有凸点的多边形称为凸多边形 凸点对应的内角小于180度 多边形上任意两顶点间的连线都在多边形之内 凹多边形 至少有一个凹点的多边形称为凹多边形 凹点对应的内角大于180度 多边形
  • OBJ格式简单用法

    参考 https www cnblogs com hont p 5239725 html https zhuanlan zhihu com p 342244212 http zwqxin com archives opengl obj mo
  • BRDF详解(包括:irradiance,radiance,intensity,立体角)

    BRDF BRDF是双向反射分布函数 Bidirectional Reflectance Distribution Function BRDF 用来定义给定入射方向上的辐射照度 irradiance 如何影响给定出射方向上的辐射率 radi
  • OPENGL学习(二)OPENGL渲染管线

    Vertex processor 对顶点进行预处理 原始点都是三维的 最终我们看到的点都是二维的 这个映射过程和点的实际位置 和我们从哪个视角去看都有关系 需要通过一系列矩阵调整点的坐标 另外 还需要确定点的颜色 这个和点到镜头的距离和光照
  • 改进的z-buffer算法实现 c

    一 实验目的 改进的z buffer算法实现 二 实验工具 VC6 0 三 实验步骤 算法思想 先将Z缓冲器中各单元的初始值置为最小值 当要改变某个象素的颜色值时 首先检查当前多边形的深度值是否大于该象素原来的深度值 保存在该象素所对应的Z
  • OpenGL超级宝典 纹理(一)

    文章目录 纹理 创建并且初始化纹理 更新纹理数据 从着色器中读取数据 采样器类型 控制纹理数据的读取方式 创建采样器对象和绑定到纹理单元 纹理过滤 设置过滤器 加载纹理 完整代码展示 shader vertex shader fragmen
  • Ray Tracing in One Weekend01无法查看ppm的问题及一个C++字符缓冲传参引发的bug

    最近在学习光线追踪的经典教程 lt
  • C#软件开发实例.私人订制自己的屏幕截图工具(一)功能概览

    本实例全部文章目录 一 功能概览 二 创建项目 注册热键 显示截图主窗口 三 托盘图标及菜单的实现 四 基本截图功能实现 五 针对拖拽时闪烁卡顿现象的优化 六 添加配置管理功能 七 添加放大镜的功能 八 添加键盘操作截图的功能 九 使用自定
  • Game101现代计算机图形学作业1

    Game101现代计算机图形学作业1 一 作业描述 二 解决方法 一 模型变换 二 投影变换 绕任意轴旋转 三 总结 四 参考和引用 一 作业描述 给定三维下三个点 v 0 2 0 0
  • 【计算机图形学】PointNet文章的简单理解与运用,点云特征提取

    PointNet论文原文 PointNet Deep Learning on Point Sets for 3D Classification and Segmentation PointNet官方代码是使用tensorflow实现的 Po

随机推荐

  • C语言中的字符串数组

    代码 include
  • Windows电脑安装Linux系统的方法-Ubuntu版

    本文内容均来自B站视频如何安装Linux与Windows双系统 只是把视频内容整理成文章形式便于速看 如有侵权 联系立删 从已经有系统U盘开始说起 前面缺失的内容后面会整理加上 U盘插到要安装的电脑上 此电脑 右键 管理 磁盘管理 找到一个
  • LLVM系列第二十二章:写一个简单的编译时函数调用统计器(Pass)

    系列文章目录 LLVM系列第一章 编译LLVM源码 LLVM系列第二章 模块Module LLVM系列第三章 函数Function LLVM系列第四章 逻辑代码块Block LLVM系列第五章 全局变量Global Variable LLV
  • 硅基生命之漫谈-2:宇宙之基本法则:聚合与分解?

    聚合与分解是宇宙的基本法则 聚合是万物存在和发展的形式 是重组基本粒子的过程 分解是万物存在和死亡的形式 是回归基本粒子的过程 分解的目的是为了重组聚合 重组聚合的结果会重新分解 太极图 八卦图 人的生命体 万物的生命体 无机体 人类社会的
  • 2023.05.30-ubuntu22.04多卡服务器卸载cuda重新安装(踩坑不断版本)

    目录 说明 1 驱动问题 1 1 卸载驱动 1 2 安装驱动 2 cuda卸载 2 1 卸载用run方式安装的CUDA和驱动 2 2 卸载用deb方式安装的CUDA 3 cudn cudnn安装 3 1 cuda11 7安装 3 2 cud
  • 【PTA】L2-035 完全二叉树的层序遍历

    L2 035 完全二叉树的层序遍历 25分 一个二叉树 如果每一个层的结点数都达到最大值 则这个二叉树就是完美二叉树 对于深度为 D 的 有 N 个结点的二叉树 若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点 这样的树就是完全二
  • Android WebView 在开发过程中有哪些坑?

    https www zhihu com question 31316646 作者 李明亮 链接 https www zhihu com question 31316646 answer 52714778 来源 知乎 著作权归作者所有 转载请
  • 华为OD机试真题- 字符串重新排序【2023Q1】【JAVA、Python、C++】

    题目描述 给定一个字符串s s包含以空格分隔的若干个单词 请对s进行如下处理后输出 1 单词内部调整 对每个单词字母重新按字典序排序 2 单词间顺序调整 1 统计每个单词出现的次数 并按次数降序排列 2 次数相同时 按单词长度升序排列 3
  • 盒子模型的理解

    盒子模型 什么是盒子 html中的标签 元素 统统都是一个矩形的平面框 在立体上 它由多个平面构成 这称为盒子模型 从底层到顶层的立体结构 margin gt background color gt background image gt
  • CUDA各版本下载

    CUDA及CUDNN各版本下载地址 1 CUDA各版本下载地址 https developer nvidia com cuda toolkit archive CUDA 各版本下载 这个网址有点难找 2 CuDNN下载地址 需要登录 htt
  • 【英语】大学英语CET考试,口语部分2(课程笔记)

    文章目录 1 口语考试介绍与备考攻略 1 1 口语考试介绍 1 2 考试备考攻略 2 其他补充 考前 2 1 一些补充 2 2 口语考试培训 重要 上课老师 金格妃 上课时间 4h 1 口语考试介绍与备考攻略 方法是通用的 CET4 6 雅
  • React合成事件原理简单实现

    1 React合成事件是什么 React 合成事件 SyntheticEvent 是 React 模拟原生 DOM 事件所有能力的一个事件对象 即浏览器原生事件的跨浏览器包装器 它根据 W3C 规范 来定义合成事件 兼容所有浏览器 拥有与浏
  • [LeetCode-58]- Length of Last Word(最后一个单词的长度)

    文章目录 题目相关 Solution 题目相关 题目解读 求最后一个单词的长度 题目 原题链接 Given a string s consists of upper lower case alphabets and empty space
  • 2021-08-04Java Mybatis-Plus命令里面的EQ、NE、GT、LT、GE、LE分别代表含义

    EQ 就是 EQUAL等于 NE就是 NOT EQUAL不等于 GT 就是 GREATER THAN大于 LT 就是 LESS THAN小于 GE 就是 GREATER THAN OR EQUAL 大于等于 LE 就是 LESS THAN
  • MapStruct从入门到出门(二)

    数据类型转换 自动类型转换 在平常的对象映射中 总会有很多类型不完全一致的情况 例如Integer转Long String转Integer或者两个自定义对象之间的转换等 在MapStruct中定义了一些类型的自动类型转换或者说是隐形类型转换
  • Increase swap size

    Question I have an old Fedora installation on my system I have just upgraded my RAM from 256 to 512 MB My swap partition
  • SpringBoot中使用Jackson导致Long型数据精度丢失问题、处理jdk8日期类型转换

    spring boot默认使用了jackson 处理请求映射 下面通过三种方案配置 对Long类型 jdk8日期类型的自定义转换处理 方案一 注解方式 JsonSerialize using ToStringSerializer class
  • 位置式PID——小车类学习心得

    位置式PID 小车类学习心得 位置式PID 公式为 val kp err ki err sum kd err err last err变量 期望值 实际值 也就是我们常说的误差 err last变量 上一次的误差 err sum变量 误差的
  • 关于MySQL的lock wait timeout exceeded解决方案

    关于MySQL出现 lock wait timeout exceeded try restarting transaction 的解决方案 一 问题抛出 在做查询语句时 MySQL 抛出了这样的异常 MySQL server error r
  • 实验一 实现改进Bresenham算法

    实验一 实现改进Bresenham算法 一 目的 1 了解直线生成基本原理和常用方法 2 掌握改进Bresenham算法的基本原理和步骤 3 使用C OpenGL编程实现如下内容 输入线段的起始点和终止点坐标位置 利用改进Bresenham