计算机图形学-设计算法绘制直线与圆.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
计算机图形学课程实验 报 告 实验题目 设计算法绘制直线与圆 班 级 姓 名 学 号 指导教师 日 期 "实验说明 试验目的: 掌握直线和圆的基本生成算法思想,并上机编程实现相应的算法。 试验地点: 教九楼401 数学系机房 实验要求(Direction): 1. 每个学生单独完成;2.开发语言为TurboC或C++,也可使用其它语言;3.请在自己的实验 报告上写明、学号、班级;4.每次交的实验报告容包括:题目、试验目的和意义、程序 制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。 "实验容 :实验题一 1.1实验题目 1).用DDA法在屏幕上画一条具有三个像素宽的直线段L1。要求:(1)直线段L1的两个 端点坐标和画线颜色都要求可以随机输入;(2)要求输出直线段L1上的各点坐标;(3)画 出直线的同时要求标明两端点坐标。 2).将课堂所讲的斜率0<K<1的中点画线算法推广到斜率K>1、-1<K<0和K<- 1的情况,编写一通用的中点画线算法。 1.2实验目的和意义 1.了解如何利用C语言和图形函数进行绘图; 2. 熟悉并掌握C语言的图形模式控制函数,图形屏幕操作函数,以及基本图形函数; 3. 通过对Turbo C进行图形程序设计的基本方法的学习,能绘制出简单的图形; 4. 熟悉并掌握DDA法在屏幕上画一条具有三个像素宽的直线段L1以及通用的中点画线算法。 通过DDA法及用的中点画线算法,了解图形系统初始化、图形系统关闭和图形模式的控制 ,并熟练运用图形坐标的设置,包括定点、读取光标以及图形颜色的设置。 1.3程序制作步骤(包括算法思想、算法流程图等) 1.自动搜索显示器类型和显示模式,初始化图形系统,通过printf、scanf语句控制线段 的端点坐标和画线颜色的自由输入; 2. DDAline:设直线之起点为(x1,y1),终点为(x2,y2),则斜率k为: 则有: .可通过计算由x方向的增量引起y的改变生成直线。由 (为直线上某步的初值)则 .也可通过计算由y方向的增量引起x的改变生成直线。由(为直线上某 步的初值)则: 3.Midpointline: .假定X坐标为的各像素点中,与直线最近点已确定为 (用实心小圆表示),那么下一个与直线最近的象素点只能是正右方的或右上方 两者之一。 . 再以M表示P1与P2的中点,即又设Q是理想直线与垂直线的交点 。显然有: .当M在Q的下方,则P2 离直线 近,应取为下一个象素点; .当M在Q的上方,则P1离直线 近,应取为下一个象素点。 .当M和Q重合,则P 1和P2离直线 一样近,两者均可取为下一个象素点 1.4主程序 1.4.1 DDA算法 #include "graphics.h" #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> DDAline(int x1, int y1, int x2, int y2, int c) { float delta_x = 0; float delta_y = 0; float x = 0; float y = 0; int dx= 0; int dy = 0; int steps = 0; int k = 0; dx=x2-x1; dy=y2-y1; if (abs(dx)>abs(dy)) { steps=3*abs(dx); } else { steps=3*abs (dy); } delta_x=(float)dx / (float)steps; delta_y=(float)dy / (float)steps; x=float(x1); y=float(y1); for (k=1; k<=steps;k++) { putpixel(int(x+0.5), int(y+0.5), c); x+=delta_x; y+=delta_y; } return 0; } void main() { char t[100] = {0}; int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; int c = 0; void dda_line(int x1,int y1,int x2,int y2,int c); int graphdriver=DETECT,graphmode; initgraph(&graphdriver,&graphmode,"D:\\TC"); /*初始化图形系统*/ printf("输入两端点坐标:\n"); scanf("<%d,%d>,<%d,%d>",&x1,&y1,&x2,&y2); printf("输入画线颜色:\n"); 【计算机图形学】是计算机科学中的一个重要分支,主要研究如何在计算机系统中生成、处理和显示图像。在本次实验中,学生们将学习和实践两种基本的图形绘制算法:DDA算法(Digital Differential Analyzer)和中点画线算法,用于在屏幕上绘制直线和圆。 **DDA算法**是一种简单的直线生成算法,适用于所有斜率的直线。它通过计算x和y方向的增量来生成直线。在实验中,学生们需要实现一个函数`DDAline`,接受起点`(x1, y1)`、终点`(x2, y2)`和颜色作为参数,画出一条具有三个像素宽度的直线。为了处理不同斜率的直线,算法需要根据x或y增量较大者来确定步长,然后逐像素地绘制。 **中点画线算法**是另一种高效的直线生成方法,尤其适合于斜率介于0和1之间的直线。该算法的核心思想是找到每一步中距离直线最近的像素点。在扩展这个算法以处理斜率大于1、小于-1的情况时,需要考虑像素点在直线两侧的可能性,确保正确选择下一步的像素位置。 实验的目的不仅在于理解和掌握这两种算法,还在于熟悉C语言的图形函数库,例如`graphics.h`,用于控制图形模式、屏幕操作和颜色设置。此外,学生需要学习如何初始化和关闭图形系统,以及如何读取用户输入来设定直线的起点、终点和颜色。 在程序制作过程中,学生们将经历以下步骤: 1. 初始化图形系统,确定显示器类型和显示模式。 2. 通过`printf`和`scanf`获取用户输入的端点坐标和颜色。 3. 实现DDA算法,计算x和y方向的增量,并根据步长逐像素绘制。 4. 对于中点画线算法,考虑不同斜率情况,判断并选择每个像素点的位置。 5. 编写主程序,调用这些算法,并展示结果。 通过这个实验,学生们不仅能深入理解计算机图形学的基础,还能提升C语言编程能力,特别是图形程序设计。同时,他们还将学会如何组织实验报告,包括题目、目的、程序步骤、主程序代码和运行结果的展示。 在提供的代码中,`DDAline`函数已经给出了DDA算法的实现,包括计算增量、确定步长和逐点绘制。在`main`函数中,学生可以添加适当的输入处理和图形系统初始化部分,以完成完整的程序。而中点画线算法的实现则需要学生自行扩展,以覆盖各种斜率的情况。 总结来说,这个实验是计算机图形学入门的重要实践,它涵盖了几何算法、图形编程和用户交互等多个关键知识点,对于提升学生的综合技能具有重要意义。
剩余27页未读,继续阅读
- 粉丝: 110
- 资源: 9354
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- CFA知识点梳理系列:CFA Level II, Reading 4 Big Data Projects
- 专业问题 · 语雀.mhtml
- 基于Vue+TP6的B2B2C多场景电商商城设计源码
- 基于小程序的研知识题库小程序源代码(java+小程序+mysql).zip
- 基于小程序的微信小程序的点餐系统源代码(java+小程序+mysql).zip
- 基于小程序的宿舍管理小程序源代码(java+小程序+mysql).zip
- 基于小程序的小区服务系统源代码(python+小程序+mysql).zip
- QT项目之中国象棋人工智能
- 基于小程序的疫情核酸预约小程序源代码(java+小程序+mysql).zip
- 基于小程序的生活小助手源代码(java+小程序+mysql).zip