《图形学》实验三:DDA算法画直线
开发环境:
VC++6.0,OpenGL
实验内容:
使用DDA算法画直线。
实验结果:
代码:
- #include <gl/glut.h>
- #include <math.h>
- #define WIDTH 500 //窗口宽度
- #define HEIGHT 500 //窗口高度
- #define DRAWLINE1 DDALine(100,200,200,100); //画直线
- #define DRAWLINE2 DDALine(200,100,450,400); //画直线
- #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //取消控制台
- void Init() //初始化
- {
- glClearColor(1.0f,1.0f,1.0f,1.0f); //设置背景颜色,完全不透明
- glColor3f(1.0f,0.0f,0.0f); //设置画笔颜色
- glMatrixMode(GL_PROJECTION); //设置投影
- gluOrtho2D(0.0, WIDTH, 0.0, HEIGHT); //设置投影区域
- }
- void DDALine(int x0,int y0,int x1,int y1) //DDA算法画线
- {
- int dx,dy,eps1,i;
- float x,y,xIncre,yIncre;
- dx = x1-x0;
- dy = y1-y0;
- x = x0,y = y0;
- if(abs(dx)>abs(dy))
- eps1 = abs(dx);
- else
- eps1 = abs(dy);
- xIncre = (float)dx / float(eps1);
- yIncre = (float)dy / float(eps1);
- for(i=;i<=eps1;i++){
- glBegin(GL_POINTS);
- glVertex2i(int(x+0.5),int(y+0.5));
- glEnd();
- x+=xIncre;
- y+=yIncre;
- }
- }
- void Display() //显示函数
- {
- glClear(GL_COLOR_BUFFER_BIT); //清空颜色堆栈
- DRAWLINE1
- DRAWLINE2
- glFlush(); //清空缓冲区指令
- }
- int main(int argc,char** argv)
- {
- glutInit(&argc,argv);
- glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化显示模式
- glutInitWindowSize(WIDTH,HEIGHT); //设置窗口尺寸
- glutInitWindowPosition(,); //设置窗口位置
- glutCreateWindow("画直线"); //创建窗口
- glutDisplayFunc(Display); //注册显示函数
- Init(); //初始化
- glutMainLoop(); //进入程序循环
- return ;
- }
Freecode : www.cnblogs.com/yym2013
《图形学》实验三:DDA算法画直线的更多相关文章
- 《图形学》实验五:改进的Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...
- 《图形学》实验四:中点Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h& ...
- Python使用DDA算法和中点Bresenham算法画直线
title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...
- 基于Bresenham和DDA算法画线段
直线:y=kx+b 为了将他在显示屏上显示出来,我们需要为相应的点赋值,那么考虑到计算机的乘法执行效率,我们肯定不会选择用Y=kx+b这个表达式求值,然后进行画线段. 我们应当是将它转化为加法运算. ...
- opencv利用hough概率变换拟合得到直线后,利用DDA算法得到直线上的像素点坐标
图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标? 这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样一个比较直接的思路就是 ...
- Bresenham’s algorithm( 布兰森汉姆算法)画直线
Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点.这个算法只会用到较为快速的整数加法.减法和位元移位,常用于绘制电脑画面中的直线.是计算机图形学 ...
- 基于Bresenham算法画圆
bresenham算法画圆思想与上篇 bresenham算法画线段 思想是一致的 画圆x^2+y^2=R^2 将他分为8个部分,如上图 1. 只要画出1中1/8圆的圆周,剩下的就可以通过对称关系画出这 ...
- 《图形学》实验七:中点Bresenham算法画椭圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画椭圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 50 ...
- 《图形学》实验六:中点Bresenham算法画圆
开发环境: VC++6.0,OpenGL 实验内容: 使用中点Bresenham算法画圆. 实验结果: 代码: #include <gl/glut.h> #define WIDTH 500 ...
随机推荐
- 分治法避免定义多个递归函数,应该使用ResultType
总结:对二叉树应用分治法时,应避免定义多个递归函数,当出现需要递归求解多种的结果时,尽量使用ResultType来让一次递归返回多种结果. 题目:Binary Tree Maximum Path Su ...
- 获取客户端IP
function getIP(){ $ip = ""; if (getenv("HTTP_CLIENT_IP") && strcasecmp(g ...
- 5.6---交换整数的奇数位和偶数位(CC150)
这道题要利用101010来&. 如下答案: public class Exchange { public int exchangeOddEven(int x) { // write code ...
- PHP模拟登录并获取数据
cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...
- neutron 同一虚拟网卡的多个IP设置
neutron port-update <端口ID> --fixed-ip subnet_id=<子网ID/子网名>,ip_address=<IP地址> --fix ...
- ConsoleApplication 添加对于 System.ServiceModel.Web 引用失败(出现黄色感叹号)的解决办法
今天在写一个WebHttpBinding的demo,再创建一个Console应用程序后,发现无法添加System.ServiceModel.Web,如图
- python: extend (扩展) 与 append (追加) 的差别
>>> li = ['a', 'b', 'c'] >>> li.extend(['d', 'e', 'f']) >>> li ['a', 'b', ...
- ios NSString 转 float的注意
今天有一个字符串 “33.3”,用想用[valueString floatValue];得到33.3000这个值,结果得到了33.2999这个值,取前3位一个是33.3,一个是33.2,产生了错误,应 ...
- lists删除
List<Map<String, Object>> trackList = bizFollowRepo.findList("trackFindPageList&quo ...
- js的json转换
静态页面是: data:[{ value:2.5, itemStyle:{ normal:{color:'#4a90e2'} } },{ value:2.5, itemStyle:{ normal:{ ...