DDA(digital differential analyzer,数字微分分析法)是一种线段扫描转换算法。它的主要算法原理是:
在一个坐标轴上以单位间隔对线段取样,从而在另一坐标轴上确定最靠近线条路径的对应坐标值。
下面是DDA算法的C++代码(里面的Window、Application等对象,是我自己用OpenGL封装的类库,仅仅是为了简便与学习,可以直接使用OpenGL代替)
#include <iostream>
#include <conio.h>
using namespace std;
#include "Application.h"
int handle(const float a) {
return int(a+0.5);
}
void drawPoint(Window& window, int x, int y){
Point *point = new Point(x, y,Color(255,255,255));
window.add((Object*)point);
}
/*
window是用于绘图的窗口
(x0,y0)是起始坐标,(x1,y1)是终点坐标
*/
void lineDDA(Window& window, int x0, int y0, int x1, int y1) {
int dx = x1 - x0, dy = y1 - y0; //dx为两点横坐标之差,dy为两点纵坐标之差
float xIncrement, yIncrement; //
float x = x0, y = y0; //将坐标的类型转换为浮点类型
int length = 0; //记录选定坐标轴对应边的长度(dx或dy)
//判断斜率大小
if (fabs(