计算机图形学之画线算法
2016-07-22 08:05
309 查看
一,DDA画线算法(easyX库) #include #include // 四舍五入 int Round(float x) { return (int)(x < 0 ? x - 0.5 : x + 0.5); } // 使用 DDA 算法画任意斜率的直线(包括起始点,不包括终止点) void Line_DDA(int x1, int y1, int x2, int y2, int color) { float x, y; // 当前坐标点 float cx, cy; // x、y 方向上的增量 int steps = abs(x2 - x1) > abs(y2 - y1) ? abs(x2 - x1) : abs(y2 - y1); x = (float)x1; y = (float)y1; cx = (float)(x2 - x1) / steps; cy = (float)(y2 - y1) / steps; for(int i = 0; i < steps; i++) { Sleep(10); putpixel(Round(x), Round(y), color); // 在坐标 (x, y) 处画一个 color 颜色的点 x += cx; y += cy; } } // 主函数 void main() { initgraph(640, 480); // 测试画线 Line_DDA(1, 478, 638, 1, GREEN); // 按任意键退出 getch(); closegraph(); } 二,Bresenham画线算法(easyX库) #include #include void Bresenhamline (int x1,int y1,int x2,int y2,int color) { int x, y, dx, dy, s1, s2, p, temp, interchange, i; x=x1; y=y1; dx=abs(x2-x1); dy=abs(y2-y1); if(x2>x1) s1=1; else s1=-1; if(y2>y1) s2=1; else s2=-1; if(dy>dx) { temp=dx; dx=dy; dy=temp; interchange=1; } else interchange=0; p=2*dy-dx; for(i=1;i<=dx;i++) { Sleep(10); putpixel(x,y,color); if(p>=0) { if(interchange==0) y=y+s2; else x=x+s1; p=p-2*dx; } if(interchange==0) x=x+s1; else y=y+s2; p=p+2*dy; } } void main() { initgraph(640, 480); // 测试画线 Bresenhamline(1, 478, 638, 1, GREEN); // 按任意键退出 getch(); closegraph(); }
相关文章推荐
- lintcode线段树的应用
- 第十讲:网络虚拟化(二)
- QTcpSocket 对连接服务器中断的不同情况进行判定
- 数据结构 有1个人和99个僵尸,僵尸吃了人就会恢复成人类,一个人可以让两个僵尸吃,但是被僵尸吃了人就会死掉。问:最后可以活下来的人有多少个? 解
- IMS网络基本概念
- 远程代理漏洞:httpoxy
- Java 9 - 比 Java 8 更接地气:定制最小化的rt.jar, REPL脚本化执行,原生json处理,支持HTTP 2.0,新的锁机制
- 编译安装httpd2.2.4
- 计算机基础
- OSI七层与TCP/IP五层网络架构详解
- HttpClient4.5.2 使用cookie保持会话——连接池的实现结束篇(4)
- H3C设备网络组建和设置
- Nginx安装HTTP SSL模块基本配置
- android 计算机布局设置
- 再谈用strace函数来查看网络发包的目的地ip和port
- TCP/IP协议详解
- HttpSession对象
- neural-networks-and-deep-learning multiple_eta.py
- Java 网络I/O模型
- https交互过程