- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华中科技大学计算机图形学实验报告全解
课 程 实 验 报 告
课程名称: 计 算 机 图 形 学
专业班级:
学 号:
姓 名:
指导教师:
报告日期: 2015-11-11
计算机科学与技术学院
实验一:分形图形绘制
实验目的(标题四号黑体)
(1)理解OpenGL 中glut 程序框架;
(2)掌握二维基本图形绘制算法;
(3)利用二维基本图形绘制算法,扩展对其他复杂图形的绘制理解。
二、实验内容
1、实验算法
中点Bresenham算法画线
输入直线的两个端点:端点、端点。必要时交换A、B两点的坐标,使A点不在B点的右边。
令,,,
讨论直线的斜率的大小及正负,分四种情况分别逐点画线:
当
最大位移方向为x轴。构建判别公式:
其中,初值。
当时,,。
当时,。
当
最大位移方向为x轴。构建判别公式:
其中,初值。
当时,,。
当时,。
当
最大位移方向为x轴。构建判别公式:
其中,初值。
当时,,。
当时,。
当
最大位移方向为x轴。构建判别公式:
其中,初值。
当时,,。
当时,。
当直线没有画完时重复b)步骤
绘制分形三角形
输入三角形的三个端点:端点、端点、端点、递归层数n。
连接A、B、C三点。
当时,连接输入三角形三边的中点,将分割得到的四个三角形中包含顶点的三个、作为输入参数,递归调用本步骤。
2、源程序
#include iostream
#include math.h
#include GL/glut.h
#define ROUND(a) ((int )(a+0.5)) //求某个数的四舍五入值
using namespace std;
//全局变量声明:三角形三顶点及递归层数
GLint Global_xa, Global_ya, Global_xb, Global_yb, Global_xc, Global_yc;
int Global_n;
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);//指定窗口的背景色为白色
glMatrixMode(GL_PROJECTION);//对投影矩阵进行操作
gluOrtho2D(0.0, 600.0, 0.0, 600.0);//使用正投影
}
//绘制直线的函数
void lineDDA(GLint xa, GLint ya, GLint xb, GLint yb)
{
GLint dx = xb - xa, dy = yb - ya; //计算x,y方向的跨距
int steps, k; //定义绘制直线像素点的步数
float xIcre, yIcre, x = xa, y = ya; //定义步长的增量
//取X,Y方向跨距较大的值为步数
if (abs(dx) abs(dy)) steps = abs(dx);
else steps = abs(dy);
//根据步数来求步长增量
xIcre = dx / (float)steps;
yIcre = dy / (float)steps;
//从起点开始绘制像素点
for (k = 0; k = steps; k++)
{
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();
x += xIcre;
y += yIcre;
}
}
//绘制直线的函数(中点Bresenham算法)
void lineBre(GLint xa, GLint ya, GLint xb, GLint yb)
{
GLint dx, dy, d, UpIncre, DownIncre, x, y; //统一规定UpIncre为能使非最大位移方向坐标改变时的Di增量
//统一规定DownIncre为不能使非最大位移方向坐标改变时的Di增量
if (xa xb) {
/* 确保a点不在b点的右方 */
x = xb; xb = xa; xa = x;
y = yb; yb = ya; ya = y;
}
x = xa; y = ya; //计算画线起点
dx = xb - xa; dy = yb - ya; //计算dx和dy
if (abs(dx) = abs(dy))
{
/* 考虑|k|=1的情况 */
您可能关注的文档
最近下载
- 03《中国药典》2020年版非无菌产品微生物限度检查:计数法解读.pptx VIP
- 解读成长型思维.pdf VIP
- 温州市名师工作室学员手册.doc
- SMED培训资料课件.ppt
- 2024年山东经贸职业学院单招职业技能测试题库(名师推荐).docx VIP
- 贵州贵阳市大数据产业集团招聘笔试题库2024.pdf
- Unit 5 Fun Club Section B 2a-2b Writing 课件 人教版(2024)英语七年级上册.pptx
- 2024年度民主生活会个人对照检查材料(带头增强党性、严守纪律、砥砺作风方面)+带头增强党性、严守纪律、砥砺作风方面存在的主要问题.doc VIP
- 黑布林阅读初二11《杰克的威士本游园会》中文版.pdf
- 项目级安全交底.docx VIP
文档评论(0)