直线生成(DDA、中点、Bresenham)算法

来源:互联网 发布:java京东面试题 编辑:程序博客网 时间:2024/05/16 08:45
#include <stdio.h>#include <graphics.h>void linedda(int x0,int y0,int x1,int y1,int color);void BresenhamLine(int x0,int y0,int x1,int y1);void MidPointLine(int x0,int y0,int x1,int y1,int color);main(){int a,b,c,d,e;int gdriver=DETECT; int gmode=0;initgraph(&gdriver,&gmode," ");cleardevice();printf("\t DDA-Function\n");printf("\tputin a,b,c,d,color:");scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);linedda(a,b,c,d,e);getch();cleardevice();printf("\tBresenhamLine-Function\n");printf("\tputin a,d,c,d:");scanf("%d%d%d%d",&a,&b,&c,&d);BresenhamLine(a,b,c,d);getch();cleardevice();printf("\tMidPointLine-Function\n");printf("\tputin a,b,c,d,color:");scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);MidPointLine(a,b,c,d,e);getch();closegraph();}void linedda(int x0,int y0,int x1,int y1,int color){int x,dy,dx,y;float m;dx=x1-x0;dy=y1-y0;m=dy/dx;y=y0;for(x=x0;x<=x1;x++){putpixel(x,(int)(y+0.5),color);y+=m;}}void BresenhamLine(int x0,int y0,int x1,int y1){int x,y,dx,dy,e;dx=x1-x0;dy=y1-y0;e=2*dy-dx;x=x0;y=y0;while(x<=x1){putpixel(x,y,2);x++;e=e+2*dy;if(e<0){e+=2*dy;}else{y++;e=2*dy-dx;}}}void MidPointLine(int x0,int y0,int x1,int y1,int color){int a,b,delta1,delta2,d,x,y;a=y0-y1;b=x1-x0;d=2*a+b;delta1=2*a;delta2=2*(a+b);x=x0;y=y0;putpixel(x,y,color);while(x<x1){if(d<0){x++;y++;d+=delta2;}else{x++;d+=delta1;}putpixel(x,y,color);}}

原创粉丝点击