- 184
- 0
- 约1.5万字
- 约 33页
- 2017-02-12 发布于重庆
- 举报
计算机图形学-填充与裁剪算法的实现
计算机图形学课程实验 报 告
实验题目 填充与裁剪算法的实现
班 级 姓 名 学 号 指导教师 日 期 实验说明
试验目的: 掌握图形填充与裁剪算法的基本思想,并能上机编程实现相应的算法。。
试验地点: 教九楼401 数学系机房
实验要求 Direction : 1.每个学生单独完成;2.开发语言为TurboC或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。
实验内容
实验题一
1.1实验题目
上机编程序实现多边形区域填充算法。要求: 1 多边形要求采用顶点表示,且顶点的个数和顶点坐标可以随机输入; 2 要求先画出多边形,画出多边形的同时要求标明各顶点坐标; 3 水平扫描线的顺序和填充颜色可以自由选择。
1.2实验目的和意义
掌握多边形区域填充的概念,掌握扫描线填充法。
1.3程序制作步骤 包括算法的基本思想、流程图、设计步骤等
一、算法过程(设计步骤)
(1)根据给出的顶点坐标数据,按y递增顺序建立ET表。
(2)根据AET指针,使之为空。
(3)使y ymin(ymin为顶点坐标中最小y值)。
(4)反复做下述各步,直至y ymax(顶点坐标中y的最大值)
图 2.1
1.4主程序
/****************************第一部分**********************************
*(头文件,宏定义,点的结构体Point,原始边记录结构体RamEdge,边记录类Edge */
#include
#includegraphics.h
#include
#include
#include
#define MAXSIZE 800
using namespace std;
//点的结构体
typedef struct int x;
int y;
Point;
//原始边记录,只记录起始和结束点,以Y递增定义
typedef struct Point start;
Point end;
RamEdge;
//边记录类Edge(用于ET表和AET表)
class Edge public:
int yMAXSIZE;
float xbottom;
float increx;
Edge int yMAXSIZE 0,int xbottom 0,float increx 0 this- yMAXSIZE yMAXSIZE;
this- xbottom xbottom;
this- increx increx;
;
bool operator Edge a return xbottom a.xbottom;
;
;
/****************************第二部分**********************************
* 根据已给顶点求出原始边记录
*/
RamEdge* SoluteRamEdge Point p[],int n int i;
RamEdge *r;
if r RamEdge * malloc sizeof RamEdge *n NULL cout 内存空间不足 endl;
exit 1 ; for i 0;i n-1;i++ if p[i].y p[i+1].y r[i].start.x p[i].x; r[i].start.y p[i].y; r[i].end.x p[i+1].x; r[i].end.y p[i+1].y; else r[i].start.x p[i+1].x; r[i].start.y p[i+1].y; r[i].end.x p[i].x; r[i].end.y p[i].y; if p[n-1].y p[0].y r[n-1].start.x p[n-1].x;
r[n-1].start.y p[n-1].y;
r[n-1].end.x p[0].x;
r[n-1].end.y p[0].y; else r[n-1].start.x p[0].x;
r[n-1].start.y p[0].y;
r[n-1].end.x p[n-1].x;
r[n-1].end.y p[n-1].y; return r; /* ****************************第三部分**********************************
* 求当前扫描线i的AET链表
*/
list ET_Structor RamEdg
原创力文档

文档评论(0)