《点斜式算法》由会员分享,可在线阅读,更多相关《点斜式算法(2页珍藏版)》请在金锄头文库上搜索。
1、点斜式算法点斜式算法是计算机图形学中一种基于直线的点斜式方程来生成直线的方法算法思想直线的点斜式方程y-y1=k(x-x1);设直线通过P1(x1,y1),Pn(xn,yn),则斜率k=y/x=(yn-y1)/(xn-x1)。如果已知第 i 点的坐标,可用步长stepx和stepy得到i+1点坐标xi+1=xi+stepxyi+1=yi+stepy或yi+1=yi+k*stepx如果stepx=1,stepy=k。算法具体实现:在0k1的情况下,我们x每次增加1,相应的y每次增加k,如果y1+ky1+0.5,则y2=y1+1,否则y2=y1;将y1再增加k,如果y1+2*ky2+0.5,则y3
2、=y2+1,否则y3=y2;如此反复比较直到终点yn。由于都是比较运算,为了方便计算,我们可以将k扩大2*x倍,进行比较运算。算法描述#include stdafx.h#include iostream#include graphics.h#include stdlib.h#include stdio.h#include conio.h#include dos.husing namespace std;void line(int x1,int y1,int xn,int yn,int color)int x,y,dx,dy,t;dx=xn-x1;dy=yn-y1;if(abs(dx)=abs(
3、dy)if(dy0) /0k1下情况for(x=x1,y=y1,t=1;x2*dx*y+dx)y=y+1;putpixel(x,y,color);else /-1k0下情况for(x=x1,y=y1,t=1;x=xn;x+,t+)if(2*dx*y1+2*t*dy0) /k1下情况for(x=x1,y=y1,t=1;y2*dy*x+dy)x=x+1;putpixel(x,y,color);else /k-1下情况for(x=x1,y=y1,t=1;y=yn;y+,t+)if(2*dy*x1+2*t*dx2*dy*x-dy)x=x-1;putpixel(x,y,color);int main() initgraph(1024,768); /启动图形库 line(0,0,480,480,BLUE); /画直线 getchar(); closegraph(); /关闭图形库 return 0;在VS2012编译下通过执行,效果如下: