计算机图形学基础实验二(DDA算法实现 稍加控制)
来源:互联网 发布:关闭计算机的8080端口 编辑:程序博客网 时间:2024/05/16 05:19
DDA算法实现
DDA算法和Bresenham算法是计算机图形学中绘制直线的两种常用算法。本文具体介绍一下DDA算法和Bresenham算法实现的具体思路。DDA算法主要是根据直线公式y = kx + b来推导出来的,其关键之处在于如何设定单位步进,即一个方向的步进为单位步进,另一个方向的步进必然是小于1。算法的具体思路如下:
1. 输入直线的起点、终点;
2. 计算x方向的间距:△X和y方向的间距:△Y。
3. 确定单位步进,取MaxSteps = max(△X,△Y); 若△X>=△Y,则X方向的步进为单位步进,X方向步进一个单位,Y方向步进△Y/MaxSteps;否则相反。
4. 设置第一个点的像素值
5. 令循环初始值为1,循环次数为MaxSteps,定义变量x,y,执行以下计算:
a. x增加一个单位步进,y增加一个单位步进
b. 设置位置为(x,y)的像素值
代码:
#include <GL/glut.h>#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h>int color[3];int wideth=0;void LineDDA(int x0, int y0, int x1, int y1,int color[]){int x, dy, dx, y;float m;dx=x1-x0;dy=y1-y0;m=dy/dx;y=y0;glColor3f (color[2]*1.0f, color[1]*1.0f, color[0]*1.0f);glPointSize(wideth);for(x=x0;x<=x1;x++){glBegin (GL_POINTS);glVertex2i (x, (int) (y+0.5));glEnd ();y+=m;}}void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f (color[2]*1.0f, color[1]*1.0f, color[0]*1.0f);glRectf (25.0, 25.0, 75.0, 75.0); glPointSize(5.0f);glBegin (GL_POINTS);glColor3f (color[2]*1.0f, color[1]*1.0f, color[0]*1.0f); glVertex2f(100.0f,200.0f);glEnd (); LineDDA (0, 0, 200, 300,color); glBegin (GL_LINES);glColor3f (1.0f, 0.0f, 0.0f); glVertex2f (100.0f, 0.0f);glColor3f (0.0f, 1.0f, 0.0f); glVertex2f (180.0f, 240.0f);glEnd (); glFlush ();}void Init(){glClearColor (0.0, 0.0, 0.0, 0.0);glShadeModel (GL_FLAT);} void Reshape (int w, int h){glViewport(0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h);}void select(){printf("选择1~7分别为如下颜色");printf("画线颜色定义如下:\n");printf(" 蓝 绿 青 红 黄 玫瑰 白\n");printf("1(001) 2(010) 3(011) 4(100) 5(101) 6(110) 7(111)\n");printf("Select[1~7]:\n");int cr;scanf("%d",&cr); int i=0;memset(color,0,sizeof(color));while(cr){ color[i++]=cr%2; cr/=2;} printf("Plese select the line's wideth:\n");scanf("%d",&wideth);wideth*=1.0; }int main (int argc, char *argv[]){select();glutInit (&argc, argv);glutInitDisplayMode (GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition (100,100);glutInitWindowSize (400, 400);glutCreateWindow("OpenGL 2!");Init();glutDisplayFunc (myDisplay);glutReshapeFunc (Reshape);glutMainLoop ();return 0;}
0 0
- 计算机图形学基础实验二(DDA算法实现 稍加控制)
- 《计算机图形学》实验一:利用OpenGL实现直线光栅化的DDA算法
- 计算机图形学作业——DDA算法实现
- 【计算机图形学】DDA算法和Bresenham算法
- 计算机图形学—DDA直线生成算法
- java画直线算法 DDA 计算机图形学
- 计算机图形学----DDA、Bresenham直线算法
- 计算机图形学 学习笔记(一):光栅图形学算法:直线扫描算法(DDA,中点画线算法,Bresenham算法)
- 实验二 直线DDA生成算法的GDI实现
- 计算机图形学之DDA画线算法Bresenham算法程序
- 图形学_画线算法(DDA、Bresenham)
- 计算机图形学——生成直线的DDA算法
- 计算机图形学 -- 画线算法 [DDA] [中点画线] [Bresenham]
- 【计算机图形学】DDA(数字微分分析仪)绘制线条
- 图形学算法--DDA画直线
- 计算机图形学(二)
- 计算机图形学(二)
- 计算机图形学DDA算法中点Bresenham算法改进的Bresenham算法
- BaiduMap初体验(三) 使用百度地图定位功能
- What’s New in MySQL 5.7? (Generally Available)
- LU分解不分块的C程序
- lCS——最长公共子序列
- 作業系統之前的程式 for stm32f4 - discovery (1) - 1 加到 10 , asm version
- 计算机图形学基础实验二(DDA算法实现 稍加控制)
- Ubuntu分区/boot容量不足
- configure: error: C compiler cannot create executables编译错误的解决办法的思路分析
- 美国媒体英语新闻
- AFNetworking 3.0迁移指南
- JS类库收罗
- [设计模式]策略模式
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
- java内存分配和String类型的深度解析