直线生成算法的实现:分别利用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