资源简介
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
相关资源
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- CCS FFT c语言算法
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- 小波变换算法 c语言版
- 3des加密算法C语言实现
- C++纯文字DOS超小RPG游戏
- DES加密算法C语言实现
- VC++MFC小游戏实例教程(实例)+MFC类库
- 线性回归算法c语言实现
- 基于C语言的模拟退火算法
- C语言实现的DES对称加密算法
- 用VC6.0实现多边形扫描线填充算法
- c语言编写的货郎担算法
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
评论
共有 条评论