- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图形学实验报告格式.doc
实验一 直线、圆弧及曲线的生成算法
一、实验目的
1、几种直线生成算法的比较,特别掌握用Bresenham直线生成算法。
2、几种圆弧生成算法的比较,掌握Bresenham圆弧生成算法。
3、掌握用像素点法直接生成其它曲线的方法。
二、基本要求
1、用不同的生成算法在屏幕上绘制出直线的图形,对不同的算法可设置不同的线形或颜色表示区别。
2、用Bresenham生成算法在屏幕上绘制出圆弧的图形,用动画的方式表演图形的生成。
三、算法提示
1、有关直线生成算法有:DDA(数值微分)直线算法、逐点比较法、直线Bresenham生成算法。
直线Bresenham生成算法思想如下(第一象限,且斜率k1的情况 图2-1 a中的1a):
画点(x1,y1),dx=x2-x1,dy=y2-y1,计算误差初值P1=2dy-dx,i=1;
求直线下一点位置 xi+1=xi+1 如果Pi0,则yi+1=yi+1,yi+1=yi;
画点(xi+1,yi+1);
求下一个误差Pi+1点,如果Pi0,则Pi+1=Pi+2dy-2dx,Pi+1=Pi+2dy;
i=i+1,如果idx+1则转步骤2,否则结束操作。
Bresenham生成算法的优点如下;
1)不必计算直线的斜率,因此不做除法。
2)不用浮点数,只用整数。
3)只做整数加减运算和乘2运算,而乘2运算可以用移位操作实现。
Bresenham算法的速度很快,并适于用硬件实现。
对于图2-1 a中的2a,只需将xi+1=xi+1改为xi+1=xi-1。
对于图2-1 a中的1b,斜率k1的情况,可交换变量x和y,y每次长1个单位。对Pi进行判断,xi+1=xi或xi+1=xi+1。
2、有关圆弧生成算法有:逐点比较法、DDA(数值微分)直线算法、圆的Bresenham生成算法。
圆的生成算法一般将圆划分为8等份,只需计算(900,450)的八分之一圆弧,其它用对称法求得(参见图2-1 b)。
Bresenham生成算法思想如下(第一象限,且斜率k1的情况):
计算误差初值P1=3-2r,i=1,画点(0,r);
求下一个光栅点位置 xi+1=xi+1 如果Pi0,则yi+1=yi,yi+1=yi-1;
画点(xi+1,yi+1);
4) 求下一个误差Pi+1点,如果Pi0,则Pi+1=Pi+2xi+6,Pi+1=Pi+4(xi-yi)+10;
5) i=i+1,如果x=y则结束操作,否则转步骤2。
圆Bresenham算法的算式简单,只需做加减法和乘4运算
3.对屏幕布局的考虑
适当选取坐标,将屏幕分成几个区域性,在每个区域内实现一种算法,生成一个图形。也可用delay实现延时实现动画。
四、上机作业题及思考题
1、用正负法编程绘制圆弧
2、resenham生成算法绘制直线。
3、用Bresenham生成算法绘制圆。
五、参考源程序
1、 数值微分法生成斜率小于90的直线
/* DDA line 数值微分法生成斜率小于90的直线 */
#include math.h
#include display.h
main()
{
int xo,yo,xa,ya,i,j;
int dx,dy,c;
float ddx,ddy,x,y;
Initialize();
printf(input start x,y(x=0-640,y=0-480)\n);
scanf(%d,%d,xo,yo); /* 输入直线的两个点 */
printf(xa:%d-- 639 ,xo);
scanf(%d,xa);
printf( ya: 0 .. %d ,yo);
scanf(%d,ya);
printf(red line is system,yellow is create\n);
if (xa=xo xa=639 ya=0 ya=yo)
/* 数值微分法生成直线算法 */
{
outtextxy(xo,yo+5,o);
outtextxy(xa,ya-10,a);
dx=xa-xo;
dy=yo-ya;
if (dxdy) c=dx;
else c=dy;
ddx=dx*1.0/c;
ddy=dy*1.0/c;
x=xo*1.0;
y=yo*1.0;
setcolor(12);
line(xo,yo,xa,ya);
getch();
while (c=0)
{ i=round(x);
j=r
您可能关注的文档
- 反应原理教材分析.ppt
- 反应速率与化学平衡图象理论分析原理.ppt
- 反应速率与化学衡图象分析.ppt
- 反渗透海水淡化的预处理技术与要求.doc
- 反渗透设备预处理设计的工艺.doc
- 反生产行为研究综述.doc
- 反编译中的静态库识别研究.doc
- 发动机故张分析法.ppt
- 发热的中医治疗分析.doc
- 发现式教学模式的应用实例.doc
- 湖南省2023年普通高校招生本科批(普通类)第一次投档分数线.xls
- 江南十校2025年5月份阶段联考高一政治试卷含答案.pdf
- 安徽江南十校联盟2025年高二年级5月阶段联考政治试卷含答案.pdf
- 安徽江南十校联盟2025年高二年级5月阶段联考物理试卷含答案.pdf
- 安徽江南十校联盟2025年高二年级5月阶段联考地理试卷含答案.pdf
- 河北省2023年高招本科普通批录取投档线.xlsx
- 海南省2023年本科普通批投档线.xlsx
- 安徽江南十校联盟2025年高二年级5月阶段联考语文试卷含答案.pdf
- 江南十校2025年5月份阶段联考高一数学(人教版)试卷含答案.pdf
- 江南十校2025年5月份阶段联考高一物理试卷含答案.pdf
最近下载
- 政府环保座谈会会议纪要.doc VIP
- 稻虾综合种养:项目可行性研究报告与实施策略.docx VIP
- 中石油加油站管理规范 .pdf VIP
- 《大学物理光电效应》课件.pptx VIP
- 华为PEST分析《商务数据分析》经典案例.docx
- ANSI CAN UL 9540A-2019 评估电池储能系统中热失控火灾传播的测试方法(中文版).pdf
- NB∕T 10010-2014 煤层气地震勘探资料采集规范.pdf
- 21 杨氏之子 课件 (共22张PPT)(含音频+视频).pptx VIP
- 教室空调使用管理规定.doc VIP
- 河南农业大学2019-2020学年《宏观经济学》期末考试试卷含标准答案.docx
文档评论(0)