直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2
来源:互联网 发布:平面设计好还是美工好 编辑:程序博客网 时间:2024/06/05 11:29
直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2,其中P1为(0, 0), P2为(8, 6)。
// fhk.cpp : 定义控制台应用程序的入口点。//#include <iostream>#include "stdio.h"#include <stdlib.h>#include <cmath>#include <gl/glut.h>using namespace std;void DDALine(int x0,int y0,int x1,int y1){int dx,dy,esp;float x,y,xIncre,yIncre;dx = x1 - x0;dy = y1 - y0;x = x0;y = y0;esp = (abs(dx) < abs(dy)) ? abs(dx) : abs(dy);xIncre = (float)dx / (float)esp;yIncre = (float)dy / (float)esp; glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f); glPointSize(3.0f);glBegin(GL_POINTS);glVertex2i((int)(x+0.5),(int)(y+0.5));glEnd();glFlush();for(int k = 0;k < esp;k++){glBegin(GL_POINTS);glVertex2i((int)(x+0.5),(int)(y+0.5));glEnd();x += xIncre;y += yIncre;glFlush();}}void BresenhamLine(int x0,int y0,int x1,int y1){ glColor3f(0.0f,1.0f,0.0f);glPointSize(3.0f);int dx = 0,dy = 0,d = 0;int x,y; x = x0,y = y0;dx = abs(x1 - x0);dy = abs(y1 - y0);d = dx - 2 * dy;glBegin(GL_POINTS);glVertex2i(x,y);glEnd();glFlush();while (x < x1){if(d < 0){x += 1;y += 1;d += 2 * (dx - dy);}if(d > 0){x += 1;d -= 2 * dy;}glBegin(GL_POINTS);glVertex2i(x,y);glEnd();glFlush();}}void Bresenham(int x0,int y0,int x1,int y1){glColor3f(0.0f,0.0f,1.0f);glPointSize(3.0f);int x = x0;int y = y0;int dx = x1 - x0;int dy = y1 - y0;int e = -dx;glBegin(GL_POINTS);glVertex2i(x,y);glEnd();glFlush();while(x <= x1){glBegin(GL_POINTS);glVertex2i(x,y);glEnd();glFlush();x++;e += 2 * dy;if (e > 0){y++;e -= 2 * dx;}}}void Inital(void){glClearColor(1.0f,1.0f,1.0f,0.0f);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);}void Display(void){int x0 = 0,y0 = 0;int x1 = 100,y1 = 100;DDALine(x0,y0,x1,y1);BresenhamLine(x0+1,y0,x1+1,y1);Bresenham(x0+2,y0,x1+2,y1);} int main(int argc,char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(400,300);glutInitWindowPosition(100,120);glutCreateWindow("DDALine");Inital();glutDisplayFunc(Display);glutMainLoop();return 0;}
阅读全文
1 0
- 直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2
- 直线生成(DDA、中点、Bresenham)算法
- DDA算法和Bresenham算法生成直线
- 直线段扫描转换算法-Bresenham算法
- C语言实现的DDA和Bresenham直线算法
- 生成直线的Bresenham算法
- 生成直线的Bresenham算法
- 生成直线的Bresenham算法
- 直线的Bresenham算法
- Bresenham直线算法的实现
- 直线扫描---Bresenham算法
- 【OpenGL】直线生成算法DDA+Bresenham
- Bresenham算法生成直线
- 计算机图形学DDA算法中点Bresenham算法改进的Bresenham算法
- 直线生成算法---Bresenham算法
- 计算机扫描直线Bresenham算法
- 计算机图形学 学习笔记(一):光栅图形学算法:直线扫描算法(DDA,中点画线算法,Bresenham算法)
- 画图板--用DDA算法和Bresenham算法画直线
- linux-shell脚本编程基本用法1
- Android添加USB连接提示音(SettingsProvider,PowerUI)
- Java -- 队列(模拟银行的排队办理业务)
- Python机器学习(03)
- MyEclipse中的web项目如何正确导入到Eclipse中运行
- 直线生成算法的实现:分别利用DDA算法、中点Bresenham算法和改进的Bresenham算法扫描转换直线段P1P2
- [YTU]_2907 (类重载实现矩阵加法)
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之三 角色管理源码分享
- 接口设计实现不同线程之间数据传递
- centos7安装putty
- 获取父级元素
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
- 堆、栈
- 设计原则之旅(二):开闭原则