计算机图形学 实验2 《绘制抛物线和正弦曲线》

计算机图形学 实验2 《绘制抛物线和正弦曲线》

一、实验目的

学习图形数据的计算、存储和图形绘制。

二、实验内容

1、计算抛物线和正弦曲线,将结果存放在一个数组中;
2、 用OpenGL函数绘制相应的图形。

三、实验方法

使用OpenGL提供的GL_LINE_STRIP绘制模式,不断根据抛物线和正弦曲线函数绘制点,通过GL_LINE_STRIP模式将点连起来形成抛物线和正弦曲线。

四、实验步骤

基本流程和实验1类似,此次绘制仍然在display函数中进行,使用的都是GL_LINE_STRIP模式进行绘制:
1、先在init函数中将较多的曲线上的点计算出来并且存入数组;
2、在display函数中通过GL_LINE_STRIP模式(将点两两之间连接起来)循环使用glVertex2d函数打点,近似形成目标曲线。

五、实验结果与实验结论

GL_LINE_STRIP模式有一定的限制,点的数目超过一定量之后对形成的曲线的毛边、锯齿的消除效果有限,如本次实验中笔者发现采用2000个点和20000个点画出来的效果区别很小。

1、绘制抛物线:

1

关键源码:

void init() {
	double x = -1;
	for (int i = 0; i < 2000; i++, x += 0.001) {
        // 抛物线
		parabolic[i][0] = x;
		parabolic[i][1] = 2.5 * x * x - 0.7;
        // 正弦曲线
		sinecurve[i][0] = x;
		sinecurve[i][1] = 0.3 * sin(4 * x * PI);
	}
}

void display(void) {
	init();
	glClearColor(0.0, 0.0, 0.0, 1.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//执行清除窗口的指令

	glColor3f(1.0f, 1.0f, 1.0f);

	glBegin(GL_LINE_STRIP);
		for (int i = 0; i < 2000; i++) {
			glVertex2d(parabolic[i][0], parabolic[i][1]);
		}
	glEnd();

	glFlush();//将缓冲区的内容刷新到屏幕上进行显示
}

2、绘制正弦曲线:

2

关键源码:

void display(void) {
	init();
	glClearColor(0.0, 0.0, 0.0, 1.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//执行清除窗口(缓冲区)的指令

	glColor3f(1.0f, 1.0f, 1.0f);

	glBegin(GL_LINE_STRIP);
		for (int i = 0; i < 2000; i++) {
			glVertex2d(sinecurve[i][0], sinecurve[i][1]);
		}
	glEnd();

	glFlush();//将缓冲区的内容刷新到屏幕上进行显示
}

六、实验小结

一开始并不知道实验怎么做,因为自己对指定曲线的绘制不是很了解,在网上查阅了很多资料之后了解到有GL_LINE_STRIP这个模式可以将相邻的点连起来,因此考虑使用足够多的点来拟合形成曲线。

但是做到后面发现拟合的效果不太行,曲线不怎么光滑,毕竟是由很多条折线形成的曲线,因此考虑把每个点之间的间隔距离减小,增加点的个数,拟合效果比之前好很多,但是优化也有上限,点的个数超过上限之后再增加就没有更进一步的优化效果了。

C++Builder 平台实现 1. 实验内容 用基本增量算法和Bresenham算法画直线 2.实验目的 1)理解在显示器上画图与在纸上画图的本质区别; 2)掌握直线的光栅扫描转换过程; 3)掌握不同算法绘制直线的思路和优缺点。 3. 实验要求 1)将像素网格表现出来,建立网格坐标系; 2)用橡皮筋的形式输入参数; 3)鼠标移动时,显示鼠标当前位置; 4)显示判别式的计算过程和下一点的选择策略; 5)记录生成点的坐标,建议用表的形式; 6)图形生成过程可以重复进行。 1. 实验内容 用正负法和Bresenham算法画圆弧 2.实验目的 1)掌握圆及圆弧的光栅扫描转换过程; 2)掌握不同算法绘制圆弧的技巧和优缺点。 3. 实验要求 1)将像素网格表现出来,建立网格坐标系; 2)用橡皮筋的形式输入参数; 3)鼠标移动时,显示鼠标当前位置; 4)显示判别式的计算过程和下一点的选择策略; 5)记录生成点的坐标,建议用表的形式; 6)图形生成过程可以重复进行。 1. 实验内容 用Cohen-SutherLand算法和liang _barsky算法进行线段裁剪 2.实验目的 1)理解裁剪的相关概念 2)掌握直线段的一般裁剪过程; 3)理解并掌握Cohen-SutherLand 算法的编码思想; 4)理解并掌握Liang_Barsky算法的参数化裁剪思想; 3. 实验要求 1)将像素网格表现出来,建立网格坐标系; 2)用橡皮筋的形式输入剪裁线段和裁剪窗口; 3)鼠标移动时,显示鼠标当前位置; 4)对于线段裁剪,线段被窗口的四条边裁剪的过程要显示出来; 6)裁剪过程可以重复进行。 1. 实验内容 用Sutherland-Hodgman算法进行多边形裁剪 2.实验目的 1)理解多边形裁剪与直线段裁剪的区别; 2)掌握多边形的裁剪过程; 3)理解并掌握Sutherland-Hodgman算法的裁剪思想。 3. 实验要求 1)将像素网格表现出来,建立网格坐标系; 2)用橡皮筋的形式输入剪裁多边形和裁剪窗口; 3)鼠标移动时,显示鼠标当前位置; 4)多边形被窗口的四条边裁剪的过程以及多边形顶点增删的过程要显示出来; 5)裁剪过程可以重复进行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值