计算机图形学(二)——实验二:直线的生成算法

5 篇文章 20 订阅
订阅专栏

实验二:直线的生成算法

2.1实验目的

(1)理解基本图形元素光栅化的基本原理
(2)掌握一种基本图形元素光栅化算法
(3)了解DDA算法、中点画线法、Bresenham算法
(4)掌握VC++中CDC类的用法

2.2实验内容

(1)类的编写
(2)完成DDA算法、中点画线法、Bresenham算法

2.3算法思路

数值微分法(DDA法):首先根据直线的斜率确定是以X方向步进还是以Y方向步进,然后沿着步进方向每步进一个点(象素),就沿另一个坐标变量k,k是直线的斜率,因为是对点阵设备输出的,所以需要对每次计算出来的一对坐标进行圆整。
Bresenham算法:将光栅设备的各行各列象素中心连接起来构造一组虚拟网格线。按直线从起点到终点的顺序计算直线与各垂直方向网格线的交点,然后确定该列象素中与此交点最近的象素。
中点画线算法:假定直线斜率k在0~1之间,当前象素点为(xp,yp),则下一个象素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1)。若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。

2.4流程图

(1)数值微分法(DDA法):
在这里插入图片描述(2)中点画线算法:
在这里插入图片描述(3)Bresenham算法:
在这里插入图片描述

2.5实验步骤

(1)数值微分法(DDA法):
从起点开始朝终点方向画点(x, y),在x轴或y轴上走一个单位长(沿x轴还是y轴取决于直线的倾斜角),由直线的倾斜程度(斜率或斜率的倒数)决定另一坐标的增量,获得下一点的坐标,将x或y四舍五入,得(x, y),若(x, y)不是终点则继续。
(2)中点画线算法:
从起点开始朝终点方向画点(x, y),当前象素点为(xp,yp),则下一个象素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1),若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点,得(x, y),若(x, y)不是终点则继续。
(3)Bresenham算法:
从起点开始朝终点方向画点(x, y)。准备画下一个点,X坐标加1,判断如果达到终点,则完成,否则找下一个点。要画的点要么为当前点的右邻接点,要么是当前点的右上邻接点。如果线段ax+by+c=0与x=x1+1的交点y坐标大于(y+*y+1))/2则选右上那个点,否则选右下那个点,得(x, y)。

2.6实验代码

(1)数值微分法(DDA法):

/
//DDA直线生成算法
/
void CLiHuchenView::OnDdaline() 
{
	// TODO: Add your command handler code here
	CDC *pDC=GetDC();//获取设备指针
	int xa=100,ya=300,xb=300,yb=200,c=RGB(255,0,0);//定义直线的两端点,直线颜色红色
	int x,y;//定义变量x,y
	float dx,dy,k;//定义增量dx,dy和斜率k
	dx=(float)(xb-xa),dy=(float)(yb-ya);//直线两端点之差为增量
	k=dy/dx;//直线斜率
	y=ya;//将第一个点纵坐标赋给y
	//k值判断
	if(abs(k)<1)
	{
		for(x=xa;x<=xb;x++)//从x左端向右端点步进
		{
			pDC->SetPixel(x,int(y+0.5),c);//添加光栅点
			y=y+k;//y增加k的单位
		}
	}
	if(abs(k)>=1)
	{
		for(y=ya;y<=yb;y++)
		{
			pDC->SetPixel(int(x+0.5),y,c);//添加光栅点
			x=x+1/k;//x增加1/k的单位
		}
	}
	ReleaseDC(pDC);//指针释放
}

(2)中点画线算法:

/
//中点直线生成算法
/
void CLiHuchenView::OnMidpointline() 
{
	// TODO: Add your command handler code here
	CDC *pDC=GetDC();//获取设备指针
	int xa=300,ya=200,xb=450,yb=300,c=RGB(0,255,0);//定义直线的两端点,直线颜色绿色
	float a,b,d1,d2,d,x,y;//定义直线方程系数a,b,中点带入直线的值d,增量d1,d2,变量x,y
	a=ya-yb;b=xb-xa;d=2*a+b;//计算a,b,d
	d1=2*a;d2=2*(a+b);计算增量d1,d2
	x=xa,y=ya;//赋初值
	pDC->SetPixel(x,y,c);添加光栅点
	while(x<xb)
	{
		//判断d
		if(d<0)
		{
			x++,y++,d+=d2;
		}
		else
		{
			x++,d+=d1;
		}
		pDC->SetPixel(x,y,c);添加光栅点
	}
	ReleaseDC(pDC);//指针释放
}

(3)Bresenham算法:

/
//Bresenham直线生成算法
/
void CLiHuchenView::OnBresenhamline() 
{
	// TODO: Add your command handler code here
	CDC *pDC=GetDC();//获取设备指针
	int x1=100,y1=200,x2=300,y2=100,c=RGB(0,0,255);//定义直线的两端点,直线颜色蓝色
	int i,s1,s2,interchange;//定义变量
	float x,y,deltax,deltay,f,temp;//定义变量x,y;增量dx,dy
	x=x1;y=y1;//赋初值
	deltax=abs(x2-x1);deltay=abs(y2-y1);//直线两端点之差为增量
	if(x2-x1>=0){ s1=1;}else {s1=-1;}//判断s1正负前进
	if(y2-y1>=0) {s2=1;}else {s2=-1;}//判断s2正负前进
	//判断dy和dx的大小
	if(deltay>deltax)
	{
		//交换dy和dx
		temp=deltax;
		deltax=deltay;
		deltay=temp;
		interchange=1;//设置交换
	}
	else {interchange=0;}
	f=2*deltay-deltax;//计算误差初值
	pDC->SetPixel(x,y,c);添加光栅点
	for(i=1;i<=deltax;i++)
	{
		if(f>=0)
		{
			if(interchange==1) x+=s1;
			else y+=s2;
			pDC->SetPixel(x,y,c);添加光栅点
			f=f-2*deltax;
		}
		else
		{
			if(interchange==1)  y+=s2;
			else x+=s1;
			f=f+2*deltay;
		}
	}
	ReleaseDC(pDC);//指针释放
}

2.7实验结果展示

在这里插入图片描述红色:数值微分法(DDA法)
绿色:中点画线算法
蓝色:Bresenham算法

计算机图形学》教学上机实验报告
WindsZL的博客
01-11 3880
课程名称: 计算机图形学 实验项目名称: 直线光栅化 实验目的: 1.理解基本图形元素光栅化的基本原理; 2.掌握基本图形元素光栅化方法,如中点方法,Bresenham方法; 3.利用OpenGL实现基本图形元素的光栅化算法实验内容与主要代码: 实验内容: 1.根据所给的直线光栅化的示范源程序,在计算机上编译运行,输出正确结果。 2.指出示范程序采用的算法,以此为基础将其改造为中点线算法或Bresenham算法,写入实验报告。 3.根据示范代码,将其改造为圆的光栅化算法,写入实验报告。 4.了解和使用O
计算机图形学实验直线生成算法实现(实验报告分析+截图+源码)
m0_55931547的博客
06-28 5321
DDA、中点Brensenham(所有情况都囊括了)、Brensenham(仅有0
计算机图形学实验报告实验直线生成算法
06-26
这是图形学实验 ,大学计科选修的一门专业, 这个实验关于直线生产算法
计算机图形学实验多边形有效边表填充算法
05-05
计算机图形学实验多边形有效边表填充算法
计算机图形学实验报告百度云盘,计算机图形学实验报告.docx
weixin_36078245的博客
06-23 442
计算机图形学实验报告.docx (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!7.9 积分计算机图形学实验报告 学校: 合肥工业大学 姓名: 学号: 班级: 实验直线生成实验目的和要求理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力;编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的直线,分别调...
计算机图形学--3种直线绘制算法原理及代码实现
emandora的博客
04-17 7274
DDA(数值微分)算法、中点直线绘制算法、Bresenham直线绘制算法原理以及C++实现
计算机图形学-直线生成算法
Calm微笑
09-27 6290
DDL算法与Bresenham算法 #include #include //void LineDDA(int x0, int y0, int x1, int y1) //{ // int x, dy, dx, y; // float m; // dx = x1 - x0; // dy = y1 - y0; // m = dy/dx; // y = y0; // glColor3f(1.0f,
计算机图形学直线的两种生成算法(DDA算法、Bresenham算法
热门推荐
酱懵静的博客
04-15 1万+
直线的两种生成算法(DDA算法、中点算法) 在计算机中,直线的显示并不是连续的,而是离散的点,这是由光栅化的本质决定 的。我们可以把屏幕理解为阴极射线管光栅显示器,这个显示器是由离散可发光的有线 区域单元(像素)组成的矩阵。确定最佳逼近某直线的像素的过程通常叫做光栅化。对于 水平线、垂直线以及 45°线,选择哪些光栅元素是显而易见的,而对于其他方向的直线, 像素的选择就很困难。因此,选择一个重要...
计算机图形学——直线生成算法
m0_60930189的博客
03-11 1929
计算机图形学——直线生成算法 前言 在计算机中,绘制一条直线是很麻烦的。我们现在常用的显示器是光栅显示器,该显示器下的图像是又一个又一个的点构成的,所以当我们要从A点到B点画一条直线时,是尽可能讲A到B两点间的像素点给画出。 下面是几种常见的生成直线算法 数值微分法 中点生成直线算法 Bresenham算法 数值微分法 假设有两点P0P_0P0​ (x0x_0x0​,y0y_0y0​)和P1P_1P1​(x0x_0x0​,y0y_0y0​),我们可以通过当前位置(xix_ixi​,yiy_iyi​)
计算机图形学——直线生成算法(原理分析及代码实现)
阿蓬的个人博客
10-23 7914
一、 综述 直线的扫描转换是指在图形输出设备上,按照扫描线的顺序,确定一组最佳逼近于直线的像素点并对像素进行写操作。直线生成的具体问题是已知直线的两个端点,要求在图像输出设备上从起点到中点通过逐次循环迭代,找到最接近直线的像素点集合。 本次实验所涉及的算法有三种:DDA算法、B算法和重点分割法。在MFC环境中测试三种算法并对比分析三种算法的误差及效率。 、 程序框架 实验程序为MFC框架,cg......
计算机图形学实验四Cohen-Sutherland直线段裁剪算法
05-08
计算机图形学实验四Cohen-Sutherland直线段裁剪算法
计算机图形学课件第2讲:直线及圆生成算法.pptx
11-16
计算机图形学课件第2讲:直线及圆生成算法.pptx
计算机图形学直线生成算法实现
06-28
 (4) 了解和使用OpenGL的生成直线的命令,来验证程序运行结果。 包括算法:DDA、中点Brensenham(所有情况都囊括了)、Brensenham(仅有0)、openGL_Line自带、中点Bresenham画圆 注释已经写的很明白了,实验过程...
上海大学计算机图形学实验(Qt版)
03-12
计算机图形学(基于Qt5.14.0) 通过鼠标交互输入算法所需数据 实现维基本图元直线生成的DDA算法,中点算法和Bresenham算法; 实现维基本图元圆弧生成的中点算法; 实现对线型线宽属性的控制。 实现维扫描转换...
计算机图形学 dda,计算机图形学直线DDA算法和Bresenham算法精选.doc
weixin_42361071的博客
07-26 457
计算机图形学直线DDA算法和Bresenham算法精选实 验 报 告课程名称: 计算机图形学院系名称:专业班级:学生姓名:学 号:指导教师: 张玉娟黑龙江工程学院教务处制实验项目直线生成实验日期2012.3.6实验地点实验楼601同组人数1实验类型□ 传统实验 现代实验 验证性 □ 综合性 □ 设计性 □ 其 他 自立式合作式研究式一、实验目...
计算机图形学|直线生成算法】中点画线法
爱喝冰红茶的方舟的博客
06-05 5835
中点画线法(Midpoint Line Algorithm)是一种画线(Line Drawing)算法,用来在计算机屏幕上绘制线条。它的基本思想是从线段的起点和终点出发,按照一定的规则向终点逐步逼近,并在途中以控制变量的方式得出每个像素点的坐标,从而绘制出所需的线条。具体实现中,中点画线法通过计算线段斜率的变化情况,来分为斜率小于1和大于等于1两种情况,并采用Bresenham的对称性原理,以中点的颜色来控制每个像素点的生长方向,从而获得较高的绘制效率和图像质量表现。
计算机图形学基本图形的生成直线DDA算法直线中点算法,Bresenham画圆算法)--附源码
技术改变命运
11-16 3648
1.熟练掌握生成直线的DDA算法,2.熟练掌握生成直线的中点算法,3.熟练掌握生成圆的Bresenham算法
计算机标准直线方程图教程,计算机图形学实验报告直线的画法(DDABresenham算法).doc...
weixin_34518801的博客
07-15 334
计算机图形学实验报告直线的画法(DDABresenham算法)华北水利水电学院计算机图形学实验报告题目:直线生成算法姓名:万婷婷学号:200911902专业:计算机科学与技术院系:信息工程学院一、实验目的学会用DDA法,中点法,Bresenham法这三种思想画直线,同时,对画直线的操作有一定的了解。实验原理及内容1. DDA法的基本思想如下:已知过端点P0(x0,y0) , P1(x1,y1...
计算机图形学(三)——实验三:圆的生成算法
chengzilhc的博客
06-13 7855
实验三:圆的生成算法 3.1实验目的 (1)了解DDA算法、中点画圆法、Bresenham算法 (2)掌握VC++中CDC类的用法 3.2实验内容 (1)类的编写 (2)完成DDA算法、中点画圆法、Bresenham算法 3.3算法思路 在平面解析几何中,圆的方程可以描述为(x–x0)2+(y–y0)2=R2,其中(x0,y0)是圆心坐标,R是圆的半径,特别的,当(x0,y0)就是坐标中心点时,圆方程可以简化为x2+y2=R2。在计算机图形学中,圆和直线一样,也存在点阵输出设备上显示或输出的问题,因此也需要
计算机图形学——几何工具算法详解》pdf
最新发布
11-06
计算机图形学——几何工具算法详解》PDF是一本关于计算机图形学的书籍,主要介绍了图形学中的几何工具算法。 该书详细解析了计算机图形学中的几何工具算法,涵盖了从基础知识到高级算法的内容。首先,书中介绍了计算机图形学的基本概念和原理,包括图形学的历史背景、矢量、维坐标系和三维坐标系等基础知识。然后,书中详细介绍了几何变换算法,包括平移、旋转、缩放等操作对图形的影响及其在计算机图形学中的应用。此外,还介绍了曲线和曲面的绘制算法,如贝塞尔曲线、B样条曲线和NURBS曲面等,以及相关算法的实现方法。另外,书中还详细阐述了光照和着色算法,包括光照模型、阴影生成和着色技术等。 《计算机图形学——几何工具算法详解》PDF书籍内容丰富、详细,适合计算机图形学领域的学习者和研究者阅读。通过学习该书,读者可以系统地了解计算机图形学的几何工具算法,掌握图形学中的基本概念和实际应用技术。此外,书中还提供了大量的实例和案例,有助于读者将理论知识应用到实际问题解决中。 总之,通过阅读《计算机图形学——几何工具算法详解》PDF,读者可以深入了解计算机图形学的几何工具算法,掌握相关的基本概念和实际应用技术,对计算机图形学领域有更深入的认识和理解。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • ENVI实验教程(2)遥感图像预处理—辐射校正 50292
  • ENVI实验教程(4)实验四、遥感图像预处理—融合、镶嵌、裁剪 49434
  • ENVI&ArcGis——植被覆盖度提取 46176
  • ENVI实验教程(1)熟悉ENVI遥感图像处理基本操作 45677
  • ENVI实验教程(5) 实验五、遥感图像增强 45127

分类专栏

  • 测绘程序设计 付费 9篇
  • ENVI 13篇
  • ArcGis 9篇
  • MATLAB 9篇
  • 计算机图形学 5篇
  • 数据结构 4篇
  • 遥感 17篇

最新评论

  • GIS二次开发:实验五 综合实验

    Iceyue9: 能求一个数据源吗?表情包表情包表情包表情包表情包表情包有偿表情包表情包表情包

  • ENVI实验教程(1)熟悉ENVI遥感图像处理基本操作

    weixin_52812118: 兄弟,你知道了么?

  • 基于ArcGIS Pro深度学习模块的树木识别流程

    普通网友: 你好,请问安装目录中的Python Command Prompt 是自己下载的吗还在哪来的呀 我的arcgispro3.0.1没找到

  • ENVI实验教程(7)实验七、遥感影像变化检测

    2301_80259729: 你好 请问那个只选择变化区域不可选怎么办

  • 基于遥感的自然生态环境检测——实验三:生态因子提取

    m0_67229468: 你想要知道什么

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 测绘程序设计——试题九:反距离加权插值
  • 测绘程序设计——试题七:电离层改正计算
  • 测绘程序设计——试题八:对流层改正计算
2024年9篇
2023年4篇
2022年11篇
2021年5篇
2020年21篇
2019年8篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nochengzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司新余百度竞价公司湘西关键词排名鹤壁百姓网标王推荐南京百度爱采购天津如何制作网站推荐资阳阿里店铺托管长葛建站多少钱巢湖SEO按效果付费价格吕梁设计公司网站唐山百度关键词包年推广多少钱昌都网站优化推广迪庆关键词按天扣费推荐迁安网站设计价格肇庆企业网站改版深圳阿里店铺托管哪家好徐州百度竞价哪家好伊春网站推广系统多少钱清远网站改版报价大连建站多少钱西安seo网站优化报价焦作百度标王多少钱武威网站优化推广公司塘坑网站建设多少钱鹤岗网站优化按天计费价格丽江网站建设哪家好重庆SEO按天计费多少钱诸城seo网站优化多少钱宜春关键词排名哪家好坪地seo网站推广报价长治百度标王歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化