中点画线法(计算机图形学)

#include <graphics.h>
#include <conio.h>
#include <iostream.h>

// 使用中点算法画任意斜率的直线(包括起始点,不包括终止点)
void Line_Midpoint(int x1, int y1, int x2, int y2, int color)
{
	int x = x1, y = y1;
	int a = y1 - y2, b = x2 - x1;
	int cx = (b >= 0 ? 1 : (b = -b, -1));
	int cy = (a <= 0 ? 1 : (a = -a, -1));

	putpixel(x, y, color);

	int d, d1, d2;
	if (-a <= b)		// 斜率绝对值 <= 1
	{
		d = 2 * a + b;
		d1 = 2 * a;
		d2 = 2 * (a + b);
		while(x != x2)
		{
			if (d < 0)
				y += cy, d += d2;
			else
				d += d1;
			x += cx;
			putpixel(x, y, color);
		}
	}
	else				// 斜率绝对值 > 1
	{
		d = 2 * b + a; 
		d1 = 2 * b;
		d2 = 2 * (a + b);
		while(y != y2) 
		{ 
			if(d < 0)
				d += d1; 
			else 
				x += cx, d += d2; 
			y += cy; 
			putpixel(x, y, color);
		} 
	}
}

// 主函数
void main()
{
	// 输入起点和终点
	int x1,y1,x2,y2;
	cout<<"请输入起点:";
	cin>>x1>>y1;
	cout<<"请输入终点:";
	cin>>x2>>y2;
	
	x1=x1+250;
	y1=250-y1;

	x2=x2+250;
	y2=250-y2;
	
	//初始化屏幕大小
	initgraph(500, 500);

	// 测试画线
	Line_Midpoint(0, 250, 500, 250, RED);//x轴
	Line_Midpoint(250, 0, 250, 500, RED);//y轴

        Line_Midpoint(x1, y1, x2, y2, BLUE);
	
	
	// 按任意键退出
	getch();
	closegraph();
}



  • 18
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值