实验一 实现改进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计算机图形学(3)

    之前我们已经可以画出直线和曲线了 但是算法虽容易理解 xff0c 但是复杂度高 xff0c 今天就介绍比较流行的DDA画线法 xff0c 还有 xff0c 对鼠标进行事件有所响应 xff0c 即 xff0c 在画板上 xff0c 鼠标左键单
  • 计算机图形学

    上课时间 xff1a 2 12周周二上午1 2 3节 Lesson1 9月15日 这堂课讲了第1 2 3章节 第一章 概述第二章 计算机图形硬件系统第三章 图形标准 第一章 概述 1 1 定义 计算机图形学是研究怎样用计算机生成 处理和显示
  • 计算机图形学(三维观察投影线、视图变换、投影变换)

    一 三维观察流水线 概念 xff1a 将建立的三维场景显示在二维视口的过程称为三维观察流水线 在三维观察流水线中 xff0c 也就是在将三维场景显示在二维视口的过程中 xff0c 需要在不同坐标系下进行不同的操作 xff0c 这些坐标系包括
  • MFC计算机图形学(3)

    之前我们已经可以画出直线和曲线了 但是算法虽容易理解 xff0c 但是复杂度高 xff0c 今天就介绍比较流行的DDA画线法 xff0c 还有 xff0c 对鼠标进行事件有所响应 xff0c 即 xff0c 在画板上 xff0c 鼠标左键单
  • OpenGL天空盒skybox

    目录 痛彻的感悟 天空盒可能的难题 天空盒代码 痛彻的感悟 今天考完试才发现自己和别人的差距还挺大的 四五六班下午的考试题目 我很快做了出来 但是自己的班级的考试题目 我竟然一道都没有成功 所以我决定把我之前准备的代码公布一下 也希望对一些
  • 用Sutherland-Hodgman算法实现裁剪任意凸多边形

    一 实验目的 用Sutherland Hodgman算法实现裁剪任意凸多边形 二 实验工具 VC6 0 三 实验步骤 思想 每次用窗口的一条边界以及其延长线来裁剪多边形 裁剪得到的多边形的顶点由两部分组成 落在可见一侧的原多边形顶点 多边形
  • unity三种图片格式

    本文转载自 http blog csdn net caption deng article details 52366907 ARGB 是一种色彩模式 也就是RGB色彩模式附加上Alpha 透明度 通道 常见于32位位图的存储结构 RGB
  • 计算机图形学学习笔记(一):坐标表示

    几种不同的笛卡尔坐标系 建模坐标系 在各自的参照系中构造每一对象的形状 比如树或家具 这些坐标系称为建模坐标系 modeling coordinate 或局部坐标系 local coordinate 或主坐标系 master coordin
  • 计算机图形学 期末复习 微课版 孔令德 七、建模与消隐 期末复习

    计算机中三维物体的表示有线框模型 表面模型和实体模型3种方法 模型的数据结构 三表结构 立方体的点表 顶点 x坐标 y坐标 z坐标 P0 X0 1 Y0 0 Z0 0 P1 X1 1 Y1 0 Z1 0 P2 X2 1 Y2 1 Z2 0
  • C++ 实现两线段是否相交、相交情况、若相交求出交点坐标

    前段时间做计算机图形学的东西 现在闲下来 对代码稍作整理 都是些实用的函数 判断是否相交 X1 Y1 X2 Y2 前线 X3 Y3 X4 Y4 后线 x y 交点坐标 相交在前线上return 1 后线return 2 交于外面return
  • GDI+学习笔记1- 概述

    一 图形概述 Windows 窗体 GDI 是构成 Microsoft Windows 操作系统子系统的应用程序编程接口 API GDI 负责在屏幕和打印机上显示信息 顾名思义 GDI 是 GDI 的后续 后者是包含在 Windows 早期
  • leaflet常用插件库

    1 常用地图切换加载 osm google baidu gaode tianditu etc https github com htoooth Leaflet ChineseTmsProviders 2 切片地图加载 wmts 支持矢量切片
  • 计算机图形学 期末复习 微课版 孔令德 六、自由曲线与曲面 期末复习

    重点 公式 连续性条件 参数连续性 0阶参数连续性 若两个相邻的曲线段在首末点相连接 C 0 1阶参数连续性 若两个相邻曲线段在相交点处有相同的一阶导数 C 1 2阶参数连续性 若两个相邻曲线段的方程在相交点处具有相同的一阶和二阶导数 C
  • 直角坐标系下点绕点旋转的坐标计算

    直角坐标系下一点 x0 y0 x 0 y 0 绕某一点 x y
  • OPENGL学习(二)OPENGL渲染管线

    Vertex processor 对顶点进行预处理 原始点都是三维的 最终我们看到的点都是二维的 这个映射过程和点的实际位置 和我们从哪个视角去看都有关系 需要通过一系列矩阵调整点的坐标 另外 还需要确定点的颜色 这个和点到镜头的距离和光照
  • Modern OpenGL---09 纹理(纹理单元可贴多个纹理)

    对之前画的矩形基础上贴上纹理 在片段着色器中 声明一个采样器 表示纹理位置 每个纹理位置叫做纹理单元 比如 0 1等 当只有一个纹理事时 纹理单元默认为0 当有一个以上的纹理时 则需要通过uniform从外部设置每个纹理单元的值 需要注意的
  • 图形学相关期刊和会议的基本信息

    目录 期刊 A类 ACM TOG A类 IEEE TIP A类 IEEE TVCG B类 TOMCCAP B类 CAGD B类 CGF B类 CAD B类 GM B类 TCSVT B类 TMM B类 SIIMS C类 CGTA C类 CAV
  • 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