划线算法

实验平台:

codeblocks+opencv1.0

划线算法:

划线时考虑三种情况:

1. 当用户输入的起点坐标和终点坐标的x相同时,随着纵坐标增加1,横坐标保持不变,画出一条竖直的线

 if(x0==x1&&y0!=y1){
                x=x0;y=y0;
            for(;y<=y1;x++)
			{
				imagdraw(x0,y);
				y+=1;
			}
        }
测试结果:
                         

2. 当用户输入的起点坐标和终点坐标的y相同时,随着像素点横坐标增加1,纵坐标保持不变,画出一条水平的线

 if(y0==y1&&x0!=x1){
                x=x0;y=y0;
            for(;x<=x1;x++)
			{
				imagdraw(x,y0);
				x+=1;
			}
        }
测试结果:
                                   

3. 当用户输入的起点坐标和终点坐标的x和y不相同时(即所画直线有斜率),设直线通过点P1(x1,y1)


P2(x2,y2),则直线方程可表示为:K=(y2-y1)/(x2-x1)
,当随着x增加一,将y取近,在y轴方向取离得近的那个像素点。
	k = dy/dx;
	if(abs(k)>=1)
	{
		if(y0<=y1)
		{
			x=x0;
			y=y0;
			for(;y<=y1;y++)
			{
				imagdraw(int(x+0.5),y);
				x += 1/k;
			}
		}
		else
		{
			x=x1;y=y1;
			for(;y<=y0;y++)
			{
				imagdraw(int(x+0.5),y);
				x += 1/k;
			}
		}
	}
	if(abs(k)<1)
	{
		if(x0<=x1)
		{
			x=x0;y=y0;
			for(;x<=x1;x++)
			{
				imagdraw(x,int(y+0.5));
				y+=k;
			}
		}
		else
		{
			x=x1;y=y1;
			for(;x<=x0;x++)
			{
				imagdraw(x,int(y+0.5));
				y+=k;
			}
		}
	}
	}

测试结果:
                              


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值