第一次学绘图,后来发现书上的SetPixel函数在vc6.0中不能用。就去百度查找了,找了好久才找到easyx(包含graphics.h头文件)。最后又查找了easyx帮助文档找到putpixel(x,y,color)( 在指定位置画一像素)能够代替书上的SetPixel(x,y,color)。
由于书本上只有斜率在0~1范围内的终点划线法,又根据书本上的方法找到了在其它斜率下的情况。
0<=k<=1 |
-1<=k<=0 |
k>1 |
k<-1 |
d=2a+b |
d=2a-b |
d=a+2b |
d=a-2b |
d>0:d2=d1+2a d<=0:d2=d1+2a+2b |
d>0:d2=d1+2a-2b d<=0:d2=d1+2a |
d>0:d2=d1+2a+2b d<=0:d2=d1+2b |
d>0:d2=d1-2a d<=0:d2=d1+2a-2b |
由于在graphics.h头文件中使用initgraph(x,y)建立绘图屏幕 只能是左上角为(0,0)
坐标,x坐标向右,y坐标向下的第一象限。所以在测试数据时候只能写起始坐标(x0,y0)终点坐标(x1,y1)在第一象限内的直线(即x0>=0,x1>=0,y0>=0,y1>=0);
Easyx下载地址:http://www.easyx.cn/downloads/
编程环境:vc6.0(安装了easyx)
运行:windows7旗舰版
至于源代码,等我的作业交上去了在贴上吧,先贴上运行结果
#include <stdio.h> #include <graphics.h> #include <conio.h> //中点画线法斜率为0~1斜率为0~1 void MidPointLine1(int x0,int y0,int x1,int y1) { //初始一个480*480的绘图屏幕 initgraph(480, 480); 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; //在对应的x,y像素点着色 putpixel(x,y,GREEN); while(x<x1) { if(d<0) { x++; y++; d+=delta2; } else { x++; d+=delta1; } //在对应的x,y像素点着色 putpixel(x,y,GREEN); //可以把下面这句取消注释,按回车看画线过程。 // system("pause"); } //为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕 getch(); closegraph(); } //斜率>1 void MidPointLine2(int x0,int y0,int x1,int y1) { //初始一个480*480的绘图屏幕 initgraph(480, 480); int a,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=a+2*b; delta1=2*(a+b); delta2=2*b; x=x0; y=y0; //在对应的x,y像素点着色 putpixel(x,y,GREEN); while(y<y1) { if(d<0) { y++; d+=delta2; } else { y++; x++; d+=delta1; } //在对应的x,y像素点着色 putpixel(x,y,GREEN); //可以把下面这句取消注释,按回车看画线过程。 // system("pause"); } //为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕 getch(); closegraph(); } //斜率为-1~0 void MidPointLine3(int x0,int y0,int x1,int y1) { //初始一个480*480的绘图屏幕 initgraph(480, 480); int a,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=2*a-b; delta1=2*a-2*b; delta2=2*a; x=x0; y=y0; //在对应的x,y像素点着色 putpixel(x,y,GREEN); while(x<x1) { if(d<0) { x++; d+=delta2; } else { x++; y--; d+=delta1; } //在对应的x,y像素点着色 putpixel(x,y,GREEN); //可以把下面这句取消注释,按回车看画线过程。 // system("pause"); } //为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕 getch(); closegraph(); } //斜率<-1 void MidPointLine4(int x0,int y0,int x1,int y1) { //初始一个480*480的绘图屏幕 initgraph(480, 480); int a,b,delta1,delta2,d,x,y; a=y0-y1; b=x1-x0; d=a-2*b; delta1=-2*b; delta2=2*(a-b); x=x0; y=y0; //在对应的x,y像素点着色 putpixel(x,y,GREEN); while(y>y1) { if(d<0) { x++; y--; d+=delta2; } else { y--; d+=delta1; } //在对应的x,y像素点着色 putpixel(x,y,GREEN); //可以把下面这句取消注释,按回车看画线过程。 // system("pause"); } //为了能够看到绘图效果 加了getch() 否则会直接关闭绘图屏幕 getch(); closegraph(); } int main() { int x1,y1,x2,y2; printf("请输入起始点,终点坐标(用空格隔开,回车结束):"); scanf("%d %d %d %d",&x1,&y1,&x2,&y2); //根据斜率范围判断对应函数 float k=(float)(y2-y1)/(float)(x2-x1); if(k>=0&&k<=1) MidPointLine1(x1,y1,x2,y2);//斜率为0~1 测试数据0 0 320 100 else if(k>1) MidPointLine2(x1,y1,x2,y2);//斜率为>1 测试数据0 0 100 320 else if(k>=-1&&k<=0) MidPointLine3(x1,y1,x2,y2);//斜率为-1~0 测试数据0 100 200 0 else MidPointLine4(x1,y1,x2,y2);//斜率为<-1 测试数据0 200 100 0 }
运行结果:
1.测试数据:0 0 320 100
运行结果:
2.测试数据:0 0 100 320
运行结果:
3.测试数据:0 100 200 0
运行结果:
4.测试数据:0 200 100 0
运行结果: