openGL一之直线DDA,正负法,Bresenham算法,圆弧正负法,Bresenham算法

实验目的:

1.  掌握OpenGL环境的配置方法。

2.  熟悉OpenGL应用程序基础架构。

3.  熟练掌握简单OpenGL应用程序的建立、调试与运行。

4.  培养良好的编程习惯和风格,并且学习撰写实验报告。

实验步骤与内容:

1. 实现直线的DDA算法、正负法、Bresenham算法。

实验核心代码如下:

//直线DDA法
void dda(float x1, float y1,float  x2 ,float y2 ) {
	float k, i;
	float x, y, dx, dy;
	k = fabsf(x2 - x1);//这里用fabsf,这里可以取浮点数的绝对值
	if (fabsf(y2 - y1) > k)
		k =fabsf(y2 - y1);
	dx = float(x2 - x1) / k;
	dy = float(y2 - y1) / k;
	x = float(x1);
	y = float(y1);
	for (i = 0.0; i < k; i++) {
		glVertex2f(x, y);
		x = x + dx;//----q1
		y = y + dy;//----q2
	}
}

测试方法:

void Display1(void) {
	glClear(GL_COLOR_BUFFER_BIT);//注意这几个glClear等函数放的位置
	glPointSize(2.0);
	glColor3f(1.0, 0.0, 0.0);/*用红色绘制对象*/
	glBegin(GL_POINTS);
	dda(-250, 300, 300, 200);
	dda(-50, -100, 300, 250);
	dda(-500,0,0,-400);
	dda(-570, 0, 570, 0); //x轴
	dda(0, -570, 0, 570); //y轴
	glEnd();
	glFlush();
}

实验结果:


1.2 正负法:

//直线正负法
void MidpointLine(float xs, float ys, float xe, float ye) {
	float a, b, dt1, dt2, d, x, y;
	float absY = ye - ys;
	float absX = xe - xs;
	//采用对称的方法来绘画其他象限的图案
	if ((fabsf(absY) > fabsf(absX)) && absX>0 && absY>0) {//斜率大于1
		float  m = ys;
		ys = xs;
		xs = m;
		float n = ye;
		ye = xe;
		xe = n;
	}
	else if (absY<0 && absX>0 && (fabsf(absY) <= fabs(absX))) {//斜率-1到0
		ys = -ys;
		ye = -ye;
	}
	else if (absY<0 && absX>0 && (fabsf(absY)>fabs(absX))) {//斜率小于-1
		float  m = ys;
		ys = xs;
		xs = -m;
		float n = ye;
		ye = xe;
		xe = -n;
		/*printf("xs=%f\n", xs);
		printf("ys
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值