用数值微分法(DDA法)绘制任意一条直线(由键盘输入直线的两端点坐标)

 

#include "graphics.h"
#include <stdio.h>
#include <math.h>
#include <process.h>
/* she ru */
int Round(float a)
{
 return (int)(a + 0.5);
}
/* DDA */
void LineWithDDA(int xStart,int yStart,int xEnd,int yEnd)
{
 int dx =xEnd - xStart,dy =yEnd - yStart,steps,k;
 float xIn, yIn, x = xStart, y = yStart;
 if(fabs(dx) > fabs(dy))
 {
  steps = fabs(dx);
 }
 else
 {
  steps = fabs(dy);
 }
 xIn = (float)dx / (float)steps;
 yIn = (float)dy / (float)steps;
 putpixel(Round(x),Round(y),2);
 for(k=0;k<steps;k++)
 {
  x+=xIn;
  y+=yIn;
  putpixel(Round(x),Round(y),255);
 }
 getchar();
}
void main()
{
	int  gdriver ,gmode;
    gdriver = DETECT;
	int x1,x2,y1,y2;
	printf("请输入第一个端点坐标:\n");
	scanf("%d%d",&x1,&y1);
	printf("请输入第二个端点坐标:\n");
	scanf("%d%d",&x2,&y2);
	initgraph(&gdriver,&gmode,"");       /* 图形系统初始化 */
	setbkcolor(15);
    LineWithDDA(x1,y1,x2,y2);
	setcolor(255);
    outtextxy(200,30,"DDA直线算法");
	getchar();
	getchar();
	//printf("BESONHAM算法:\n");
    //LineWithBresenham_One(x1,y1,x2,y2);
    closegraph ( );                     /*关闭图形系统,返回文本方式  */
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计科 执念

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

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

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

打赏作者

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

抵扣说明:

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

余额充值