• 大小: 281KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: C/C++
  • 标签: opengl  C++  算法  

资源简介

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

评论

共有 条评论