C语言——DDA算法生成直线(easyx图形库)

数值微分法即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();                       //关闭图形窗口
}

结果显示:

发布了29 篇原创文章 · 获赞 83 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/l59565455/article/details/87456650