数值微分
DDA(Digital Differential Analyzer)画线算法
首先在这里给不想读大篇幅的朋友,直接写上DDA算法的核心实现代码:
上面这个只针对斜率绝对值小于1的。
// 实现DDA算法。
// author: 赵天宇
// date : 2018/03/09
void DDADrawLine::LineDDA(int x0, int y0, int x1, int y1)
{
float x = 0.0;
float y = 0.0;
float m = 0.0;
// 添加增量,实现增量思想
float dx = x1 - x0;
float dy = y1 - y0;
if (dx != 0)
{
m = dy / dx;
if (m = -1)
{
y = y0;
for (x = x0; x 1 || m < -1)
{
m = 1 / m;
x = x0;
for (y = y0; y abs(dy))
{
steps = abs(dx);
}
else
{
steps = abs(dy);
}
delta_x = (GLfloat)dx / (GLfloat)steps;
delta_y = (GLfloat)dy / (GLfloat)steps;
x = xa;
y = ya;
// glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex3f(x, y, 0);
for (int i = 1; i xs >> ys >> xe >> ye;
glutInitWindowPosition(50, 100);
glutInitWindowSize(500, 500);
glutCreateWindow("DDA画线算法");
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 500, 0.0, 500.0);
glutDisplayFunc(lineSegement);
glutMainLoop();
}
// 实现DDA算法。
// author: 赵天宇
// date : 2018/03/09
void DDADrawLine::LineDDA(int x0, int y0, int x1, int y1)
{
float x = 0.0;
float y = 0.0;
float m = 0.0;
// 添加增量,实现增量思想
float dx = x1 - x0;
float dy = y1 - y0;
if (dx != 0)
{
m = dy / dx;
if (m = -1)
{
y = y0;
for (x = x0; x 1 || m < -1)
{
m = 1 / m;
x = x0;
for (y = y0; y abs(dy))
{
steps = abs(dx);
}
else
{
steps = abs(dy);
}
delta_x = (GLfloat)dx / (GLfloat)steps;
delta_y = (GLfloat)dy / (GLfloat)steps;
x = xa;
y = ya;
// glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex3f(x, y, 0);
for (int i = 1; i |