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