DDA算法、正负法、Bresenham算法

该博客详细介绍了如何使用DDA算法、正负法和Bresenham算法来实现直线及圆弧的绘制,并通过这些算法实际绘制了中国象棋的棋盘和棋子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

2. 实现圆弧的正负法和Bresenham算法。

3. 利用上述完成的算法绘制中国象棋的棋盘和棋子。

// cpt1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<math.h>
#include <GL/glut.h>

void init(void)
{
	glClearColor(1.0, 1.0, 1.0, 0.0);//清屏颜色
	glMatrixMode(GL_PROJECTION); //设置投影矩阵
	glLoadIdentity();//单位化上述投影矩阵
	gluOrtho2D(-1000, 1000, -1000, 1000);//设置具体投影 矩阵为平面正交投影 
}

void gl_Point(int x, int y)
{
	glPointSize(2.0f);
	glBegin(GL_POINTS);//OpenGL绘图命令参数
	glVertex2i(x, y);   // 指定画线的端点坐标.
	glEnd();// OpenGL绘图结束命令参数
}
void gl_Pointdda(int x, int y)
{
	glPointSize(3.0f);
	glBegin(GL_POINTS);//OpenGL绘图命令参数
	glVertex2i(x, y);   // 指定画线的端点坐标.
	glEnd();// OpenGL绘图结束命令参数
}

void dda(int x1, int y1, int x2, int y2)//直线DDA算法
{
	int k, i;
	float x, y, dx, dy;
	k = abs(x2 - x1);
	if (abs(y2 - y1)>k)
		k = abs(y2 - y1);
	dx = (float)(x2 - x1) / k;
	dy = (float)(y2 - y1) / k;
	x = (float)(x1);
	y = (float)(y1);
	for (i = 0; i<k; i++)
	{
		gl_Pointdda((int)(x + 0.5), (int)(y + 0.5));
		x = x + dx;
		y = y + dy;
	}
}


//交换两个数字
void swap(int x1, int x2)
{
	int temp = x2;
	x2 = x1;
	x1 = temp;
}

void MidpointLine(int xs, int ys, int xe, int ye)//画直线的正负法
{
	if (xs>xe)
	{
		swap(xs, xe);//因为书上的是假设s是起点,e是终点
		swap(ys, ye);
	}
	float a, b, dt1, dt2, d, x, y;
	a = ys - ye;
	b = xe - xs;
	float k = (float
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值