增量DDA画线算法C++

增量DDA画线算法

 

DDAline(double x1,double y1,double x2,double y2)
{
	double length;
	double dx,dy;
	double x,y;
	if(abs(x2-x1)>=abs(y2-y1))
		length=abs(x2-x1);
	else
		length=abs(y2-y1);
	dx=(x2-x1)/length;
	dy=(y2-y1)/length;
	x=x1+0.5*Sign(dx);
	y=y1+0.5*Sign(dy);
	int i=1;
	while (i<length)
	{
		setpixel(int(x),int(y));
		x=x+dx;
		y=y+dy;
		i=i+1;
	}
	
	
}

int Sign(double x)
{
	if(x<0)
 		return -1;
	if(x==0)
		return 0;
	if(x>0)
		return 1;	
}

/另一种

 

//DDA画线算法
#include<stdlib>
#include<math.h>

inline int round(const float a){return int(a+0.5);}
void DDAline(int x0,int y0,int xEnd,int yEnd)
{
	int dx=xEnd-x0,dy=yEnd-y0,steps,k;
	float xIncrement,yIncrement,x=x0,y=y0;
	if(fabs(dx)>fabs(dy))
	{
	steps=fabs(dx);
	}
	else
	{
	steps=fabs(dy);
	}
	xIncrement=float(dx)/float(steps);
	yIncrement=float(dy)/float(steps);
	setPixel(round(x),round(y));
	for(k=0;k<steps;k++)
	{
	x+=xIncrement;
	y+=yIncrement;
	setPixel(round(x),round(y));
	}
}

 

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值