数值微分法即DDA法(Digital Differential Analyzer),是一种基于直线的微分方程来生成直线的方法。
在此不做详细介绍,想要详细学习了解的可以百度学习一下。
核心:
源码展示:
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
void DDA(float x1, float y1, float x2, float y2)
//x1,y1起始点,x2,y2终止点
{
int i, steps;
int x0 = 400, y0 = 300; //坐标轴原点
float x, y, delta_x, delta_y, dx, dy;
dx = x2 - x1;
dy = y2 - y1;
if (fabs(dx) >= fabs(dy))
steps = fabs(dx);
else
steps = fabs(dy);
delta_x = float(1.0*dx / steps); //让结果为浮点数
delta_y = float(1.0*dy / steps);
x = x1;
y = y1;
putpixel((x + x0), (y0 - y), RED); //画第一个点
for (i = 1; i <= steps; i++)
{
x = x + delta_x;
y = y + delta_y;
putpixel((x + x0), (y0 - int(y + 0.5)), RED); //y+0.5四舍五入运算
Sleep(50); //两个点间隔50毫秒
}
}
void main()
{
float x1, x2, y1, y2;
int x0 = 400, y0 = 300;
printf("请输入两点的坐标,例0.0 0.0 100.0 100.0:\n");
scanf("%f %f %f %f",&x1,&y1,&x2,&y2);
initgraph(800, 600); //初始化图形窗口大小
setbkcolor(WHITE); //设置背景色为白色
cleardevice();
setcolor(BLACK); //设置坐标颜色为黑色
line(0, y0, x0 * 2, y0); //坐标轴X
line(x0, 0, x0, y0 * 2); //坐标轴Y
DDA(x1, y1, x2, y2); //DDA画线算法
_getch(); //等待一个任意输入结束
closegraph(); //关闭图形窗口
}
结果显示: