資源簡介
VC++6.0項目,運用DDA算法畫線,直線的斜率為任意值,代碼可以直接運行。

代碼片段和文件信息
/*
DDA畫線算法:方程y=kx+b
已知線段的起點(x0y0)和終點(x1y1);x0y0x1y1為int類型
計算出兩端點間的水平和垂直的差值dx=x1-x0,dy=y1-y0
如果dx>dyx方向上的像素數目steps=fabs(dx)
x方向的增量xI=dx/stpes=1,y方向的增量yI=dy/stpes
設第P個點為(xpyp)?下一個點Q則為(xp+xIyp+yI)
每一步描點都要對y進行四舍五入取整,即Q(xp+xIround(yp+yI))
*/
#include
#include
void?init(void);
int?round(float?a); //四舍五入
void?setPixel(int?xint?y);//描點
void?Algorithm(int?x0int?y0int?x1int?y1);//算法
void?lineDDA(void);//數據測試
void?init(void){
glClearColor(1.01.01.00.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0600.00.0400.0);
}
int?round(float?a){ //四舍五入
return?int(a+0.5);
}
void?setPixel(int?xint?y){ //描點
glBegin(GL_POINTS);
glVertex2i(xy);
glEnd();
}
void?Algorithm(int?x0int?y0int?x1int?y1){??//算法
int?dxdysteps;
float?xIyIxy;
x=x0;
y=y0;
dx=x1-x0;?
dy=y1-y0;
if(fabs(dx)>=fabs(dy)){ //0°-45°??45°??145°??145°-180°
steps=fabs(dx);
}else{ //45°-90°??90°??90°-145°
steps=fabs(dy);
}
xI=float(dx)/float(steps); //x的單位步進
yI=float(dy)/float(steps); //y的單位步進
setPixel(round(x)round(y)); //描起點
for(int?i=0;i<=steps;i++){
x+=xI;
y+=yI;
setPixel(round(x)round(y));
}
}
void?lineDDA(void){ //數據測試
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f0.0f0.0f);
glPointSize(2);
Algorithm(15050450350); //45°斜上
Algorithm(45050150350); //45°斜下
Algorithm(150200450200); //橫
Algorithm(30050300350); //豎
Algorithm(15050450200); //0°-45°
Algorithm(450350150200);
Algorithm(30050450350); //45°-90°
Algorithm(30035015050);
Algorithm(30035045050); //90°-145°
Algorithm(30050150350);
Algorithm(15020045050); //145°-180°??
Algorithm(450200150350);
glFlush();
}
void?main(int?argcchar?**argv){
glutInit(&argcargv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(350100);
glutInitWindowSize(600400);
glutCreateWindow(“DDA?line?drawing?algorithm“);
init();
glutDisplayFunc(lineDDA);
glutMainLoop();
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-04-03?09:52??DDA畫線算法\
?????文件????????4340??2016-04-02?11:35??DDA畫線算法\DDA畫線算法.dsp
?????文件?????????530??2016-04-02?11:35??DDA畫線算法\DDA畫線算法.dsw
?????文件???????41984??2016-04-03?09:50??DDA畫線算法\DDA畫線算法.ncb
?????文件???????48640??2016-04-03?09:50??DDA畫線算法\DDA畫線算法.opt
?????文件????????1317??2016-04-03?09:50??DDA畫線算法\DDA畫線算法.plg
?????目錄???????????0??2016-04-03?09:52??DDA畫線算法\Debug\
?????文件??????196677??2016-04-03?09:50??DDA畫線算法\Debug\DDA畫線算法.exe
?????文件??????252772??2016-04-03?09:50??DDA畫線算法\Debug\DDA畫線算法.ilk
?????文件??????332816??2016-04-02?15:21??DDA畫線算法\Debug\DDA畫線算法.pch
?????文件??????459776??2016-04-03?09:50??DDA畫線算法\Debug\DDA畫線算法.pdb
?????文件????????7607??2016-04-03?09:50??DDA畫線算法\Debug\lineDDA.obj
?????文件???????33792??2016-04-03?09:50??DDA畫線算法\Debug\vc60.idb
?????文件???????45056??2016-04-03?09:50??DDA畫線算法\Debug\vc60.pdb
?????文件????????2242??2016-04-03?09:50??DDA畫線算法\lineDDA.cpp
- 上一篇:超定方程組最小二乘法代碼詳解
- 下一篇:單片機c頭文件at89X51/AT89X52
評論
共有 條評論