计算机图形学:DDA算法画直线

#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))			//令跨度大的轴步数变化为1
		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("请输入两点的坐标:\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();                       //关闭图形窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值