版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 直线段生成绘制的实现算法班级 08信计2班 学号20080502050姓名 张玉凤 分数 一、实验目的和要求:1、掌握光栅图形显示基本原理2、熟悉直线的生成算法,掌握直线的绘制3、初步了解Tc下画图基本程序结构;4、初步了解DDA画线算法及Bresenham算法的思想和基本方法二、实验主要思想:1、DDA算法思想: 数值微分法即DDA法,这是一种基于直线的微分方程来生成直线的方法。选定和中较大者作为步进方向,取该方向上的为一个像素单位长,即x每次递增一个像素,然后利用公式计算出相应的y值,把每次计算出的取整后顺序输出到显示器,则得到光栅后的直线。2、中点直线算法思想: 假定直线斜率k在
2、01之间(k的其它取值可以类似处理),当前象素点为(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为下一个象素点。这就是中点画线法的基本原理。三、实验内容及步骤1、dda画线算法画一段直线实验代码:#include"stdio.h"#include"graphics.h"void DDALine(int x1,int y1, int x2,int y
3、2) double dx, dy,e,x,y; int i; dx=x2-x1; dy=y2-y1; e=(fabs(dx)>fabs(dy)? fabs(dx):fabs(dy); dx/=e; dy/=e; x=x1; y=y1;
4、 for(i=1;i<=e;i+) putpixel(int)(x+0.5),(int)(y+0.5),GREEN); x+=dx; y+=dy; void main() int driver=VGA; in
5、t mode=VGAHI; initgraph(&driver,&mode,""); DDALine(100,150,250,300 ); getch(); closegraph();运行结果: 2. 用Bresenham画线算法画直线,并完善算法功能,使之适应更广实验代码:#include<stdio.h>#include<graphics.h>void Bresenhamline(int
6、x1,int y1,int x2,int y2) int x,y,dx,dy,p; x=x1; y=y1; dx=x2-x1; dy=y2-y1; p=2*dy-dx; for(;x<=x2;x+) putpixel(x
7、,y,BLUE); if(p>=0) y+; p+=2*(dy-dx); &
8、#160; else p+=2*dy; main() int driver=VGA; int mode=VGAHI;
9、 initgraph(&driver,&mode,""); Bresenhamline(50,150,200,250); getch(); closegraph();运行结果:3.、对比Bresenham算法、DDA算法、中点算法三种算法的像素逼近效果和程序执行速度 三两种算法的像素逼近效果和程序执行速度。实验代码:#include <stdio.h>#include <graphics.h>#inclu
10、de <math.h>#include <bios.h>#include <time.h>#include <conio.h>void DrawZb();void BLine(int, int, int, int);void DDALine(int, int, int, int);void MidLine(int, int, int, int);void main() int i; char str20; long oldtime, newtime,time; int gd = VGA, gm = VGAHI; initgraph(&gd
11、, &gm, "D:TCTCPPBGI"); DrawZb(); outtextxy(10,10,"Welcome to this program!"); settextstyle(2,0,0); outtextxy(10,420,"Name : Lineswork 1.0"); outtextxy(10,430,"Information : Computer Graphics Work - lines"); outtextxy(10,440,"CopyRight : (C) Lewsn 2010
12、"); outtextxy(10,450,"Made by : Zhang Shaolei OUC 2010/12 "); settextstyle(0,0,0); setcolor(11); outtextxy(10,30,"Press to Bline! "); getch(); oldtime = biostime(0,0L); for(i = 0; i < 200; i+) BLine(0, 0, 200, 50); BLine(0, 0, 50, 200); BLine(0, 0, -50, 200); BLine(0, 0,
13、-200, 50); BLine(0, 0, -200, -50); BLine(0, 0, -50, -200); BLine(0, 0, 50, -200); BLine(0, 0, 200, -50); newtime = biostime(0,0L); time = (newtime - oldtime) * 1000 /CLK_TCK; sprintf(str, "Time: %d ms",time); outtextxy(170, 30, str); setcolor(10); outtextxy(10, 50, "Press to DDAline!
14、"); getch(); oldtime = biostime(0,0L); for(i = 0; i < 200; i+) DDALine(0, 0, 190, 80); DDALine(0, 0, 80, 190); DDALine(0, 0, -80, 190); DDALine(0, 0, -190, 80); DDALine(0, 0, -190, -80); DDALine(0, 0, -80, -190); DDALine(0, 0, 80, -190); DDALine(0, 0, 190, -80); newtime = biostime(0,0L); tim
15、e = (newtime - oldtime) * 1000 /CLK_TCK; sprintf(str, "Time: %d ms",time); outtextxy(170, 50, str); setcolor(12); outtextxy(10, 70, "Press to Midline! "); getch(); oldtime = biostime(0,0L); for(i = 0; i < 200; i+) MidLine(0, 0, 180, 100); MidLine(0, 0, 100, 180); MidLine(0, 0,
16、 -100, 180); MidLine(0, 0, -180, 100); MidLine(0, 0, -180, -100); MidLine(0, 0, -100, -180); MidLine(0, 0, 100, -180); MidLine(0, 0, 180, -100); newtime = biostime(0,0L); time = (newtime - oldtime) * 1000 /CLK_TCK ; sprintf(str, "Time: %d ms",time); outtextxy(170, 70, str); setcolor(14); g
17、etch(); setcolor(15); outtextxy(10,110,"Press to Exit! "); getch(); closegraph();void DrawZb() setcolor(15); line(320,10,320,470); line(20,240,620,240); line(320,10,315,15); line(320,10,325,15); line(615,235,620,240); line(615,245,620,240); return;void BLine(int x1, int y1, int x2, int y2)
18、 int i, e, exchange, xsign, ysign; int x, y, dx, dy; dx=abs(x2-x1); dy=abs(y2-y1); x=x1; y=y1; exchange=0; if(dy>dx) i=dx; dx=dy; dy=i; exchange=1; e=2*dy-dx; xsign=(x2>x1)? 1:-1; ysign=(y2>y1)? 1:-1; for(i=0; i<=dx; i+) putpixel(x+320, 240-y, 11); if(e>=0) e=e-2*dx; if(exchange) x+=x
19、sign; else y+=ysign; e=e+2*dy; if(exchange) y+=ysign; else x+=xsign; void DDALine(int x1,int y1,int x2,int y2) float x,y,dx,dy; int i,step; x = x1 + 0.5; y = y1 + 0.5; step = abs(x2 - x1) > abs(y2 - y1) ? abs(x2 - x1) : abs(y2 - y1); dx = (float)(x2 - x1) / step; dy = (float)(y2 - y1) / step; for(i = 0; i<=step; i+) putpixel( (int)x+320, 240-(int)y, 10); x += dx; y += dy; void MidLine(int x1, int y1, int x2, int y2) if(abs(x1 - x2) <= 1 && abs(y1 - y2) <= 1) putpixel ( (int)(320 + (x1 + x2)/2 +0.5), (int)(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河北省定州市高二历史上册期末考试检测卷审定版附答案
- 2026年青海省格尔木市高二历史下册期末考试试卷附参考答案【典型题】
- 2026 江苏 水利岗 事业单位 易错点巩固训练卷
- 2026下半年小学美术教资面试结构化题库及解析
- 2026下半年下半年小学语文教资面试古诗词试卷
- 2026年档案数字化加工员职业技能等级认定(一级)操作技能历年真题
- 2026年职业指导师职业技能等级认定操作技能模拟试题
- 刘克庄贺贾之作新论
- 2026年投诉处理员职业技能等级认定(二级)操作技能试题
- 2026年全国导游人员资格考试(中级)导游业务试题
- 2026-2027学年小学五年级上册数学全册教案(教学设计)人教版
- T∕CCEAS008-2026 建设工程造价咨询成果文件质量标准
- 医院检验科生物安全突发事件应急预案
- (正式版)DB34∕T 4541-2023 《废弃露天采坑一般工业固废处置与生态修复技术规范》
- 2026年湖北省检察官、法官入员额考试真题(附答案)
- 常见ABO疑难血型案例分析
- 【新教材】2026年秋季统编版九年级上册道德与法治第一单元 坚持党的全面领导 考点速记+练习题(含答案)
- 2026年新团员入团考试试题及答案
- 2026华能陇东电力筹建处校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 外贸企业进出口报关文件模板合集
- 炼油与化工装置离心式压缩机组在线监测系统技术规范
评论
0/150
提交评论