- 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轴。构建判别公式:
其中,初值。
当时,。
时,。
绘制分形三角形
输入三角形的三个端点:端点、端点、、递归层数
连接A、B、C三点。
当时,连接输入三角形三边的中点,将分割得到的四个三角形中包含顶点的三个、作为输入参数,递归调用本步骤。
#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的情况 */
if (dy = 0) {
/* 考虑k=0的情况 */
d = dx - 2 * dy; //计算D0
UpI
文档评论(0)