OpenGL Bresenhan画线法

2023-05-16

#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>
void swap(int *a,int *b)
{
	int temp;
	temp=*a;
	*a=*b;
	*b=temp;
}
void Bresenham(int x1,int y1,int x2,int y2)
{
	glColor3f(1.0,0.0,1.0);
	glPointSize(1);

	glVertex2i(x1,y1);
	int dx=abs(x2-x1);		//坐标平移至原点,[dx,dy]是线段终点;
	int dy=abs(y2-y1);
	if(dx==0&&dy==0)
		return ;			//起点与重点相同时结束
	int flag=0;
	if(dx<dy)				//斜率大于1时,调换x,y坐标,按斜率[0,1]的规则画线
	{
		flag=1;				//标志位,是1那么画点时要调换x,y坐标
		swap(&x1,&y1);
		swap(&x2,&y2);
		swap(&dx,&dy);
	}
	int xstep=(x2-x1) ? 1:-1;		//斜率[0,1],x向正方向走一步,否则x向负方向走一步,下同
	int ystep=(y2-y1) ? 1:-1;
	int xs=x1,ys=y1;				//不应直接调用改变x1,y1,x2,y2的值,防止其他函数体调用出错


	int ds=2*dy;				//走位判别式:d[i+1]=d[i]+2(dy-dx),d[i]>=0时
	int dt=2*(dy-dx);			//			  d[i+1]=d[i]+2dy,d[i]<0时
	int d=0;
	while(xs!=x2)
	{
		if(d<0)
			d+=ds;
		else
		{
			ys+=ystep;d+=dt;
		}
		glBegin(GL_POINTS);
		if(flag)
			glVertex2i(ys,xs);
		else
			glVertex2i(xs,ys);
		glEnd();
		//printf("x=%d,y=%d\n",xs,ys);
		xs+=xstep;
	}
}
void mydisplay(void)
{
	glClearColor(0.0,0.0,0.0,0.0);
	glClear(GL_COLOR_BUFFER_BIT);
	Bresenham(0,0,600,900);
	glFlush();		
}
int main(int argc,char* argv[])
{	
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(400,400);
	glutCreateWindow("hello");
    gluOrtho2D(0.0,1000.0,0.0,1000.0); 
	glutDisplayFunc(mydisplay);

	glutMainLoop();
	return 0;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL Bresenhan画线法 的相关文章

  • Cocos2d-x初入学堂(13)-->Tiled Map Editor地图编辑器

    欢迎转载 xff01 转载时请注明出处 xff1a http blog csdn net aa4790139 article details 8135831 我开发的游戏只有第一款游戏 xff0c 没有用到地图编辑器 xff0c 那是我刚进
  • Linux 常用命令脚本源码查看方法总结

    Linux 常用命令脚本源码查看方法总结 下载相关软件包 以32位Ubuntu14 04下 xff0c 获取ls命令的源码为例 xff0c 能够使用例如以下的方法下载源码 xff1a 1 xff09 使用which命令查看ls命令的位置 x
  • 进程和线程的区别与联系

    1 共同点 功能上都是用于实现多任务并发程序设计的技术手段 xff0c 线程的状态包括就绪 执行与阻塞 xff0c 与进程类似 从系统实现的角度看 xff0c 进程实体和线程实体在Linux内核中都是有task struct实现的 xff0
  • AD9的pcb 里面怎样才能从TOP层视图换成从BOTTOM层网上面看,相当于把板子翻过来看

    AD9中更改PCB的视角 切换到3D xff08 view gt switch To 3D xff09 视图 xff0c 然后点击 view gt Orthogonal Rotation 然后在切换到2D视图 xff08 view gt s
  • opencv中三种像素访问方式的运行速度比较

    本文目的 xff1a 在opencv中有三种方式可以读写图像的像素 xff0c 分别为 xff1a 指针读写 迭代器读写 动态地址计算读写 虽然三种方式都可以完成同样的目的 xff0c 但是运行速度却有快有慢 xff0c 尤其是在实现一些复
  • 如何确认系统是采用大端还是小端

    如何确认系统是采用大端还是小端 1 大小端 大端 xff08 存储 xff09 模式 xff1a 是指一个数据的低位字节序的内容放在高地址处 xff0c 高位字节序存的内容放在低地址处 如 xff1a 一个数0x12345678存放在一个4
  • C++ Primer Plus 第六版 所有章节课后编程练习答案

    我的独立博客地址 xff1a www blog4jimmy com xff0c 欢迎大家关注 下面的是C 43 43 Primer Plus 第六版所有章节的课后编程练习的答案 xff0c 都是博主自己写的 xff0c 有不对的地方请大家留
  • 串口发送大数组

    用stm32f4XX发送采集到的数据时 xff0c 如果数据量特别大 xff0c 直接发送一个大数组可能比较占内存 这时候 xff0c 可以逐个发送数据 最好将大数组定义为全局变量 定义在函数内时 xff0c 可能导致栈不够深而报错 其模式
  • IP数据包校验过程

    1 算法思路 xff1a IP ICMP IGMP TCP UDP等协议的校验和算法都是相同的 xff0c 算法如下 xff1a 在发送数据时 xff0c 为了计算IP数据包的校验和 应该按如下步骤 xff1a xff08 1 xff09
  • CMake 和makefile

    1 gcc 它是GNU Compiler Collection xff08 就是GNU编译器套件 xff09 xff0c 也可以简单认为是编译器 xff0c 它可以编译很多种编程语言 xff08 括C C 43 43 Objective C
  • ROS CMakeLists中target_link_libraries相对路径设置

    希望大家收藏 xff1a 本文更新地址 xff1a https haoqchen site 2018 04 26 CMakeLists setting relative path 左侧专栏还在更新其他ROS实用技巧哦 xff0c 关注一波
  • AD10 复制问题(复制方法和智能粘贴 拼版)

    ad10PCB复制不成功 频繁的遇到过在PCB界面复制不成功的情况 xff0c 今天终于搞明白了是什么原因造成的 当我们选中元件的时候 xff0c 鼠标箭头就会有一个十字架的形状 xff0c 这时候直接按下CTRL 43 C然后再在其他的地
  • Postman中文版,竟如此简单,秒变中文

    好多小伙伴 xff0c 尤其是刚入门软件测试的 xff0c 对英文版本的Postman很抵触 xff0c 希望有个中文版的 xff0c 不过很遗憾的是Postman只有英文版本 xff0c 但凡事都有例外 xff0c 某天在逛github的
  • Http协议报文格式

    一 整体介绍 Http协议在传输层基于TCP协议 xff0c 在Http1 1之前每次请求在TCP层都需进行一轮连接和释放 xff08 三次握手 四次握手 xff09 xff0c 从Http1 1开始默认使用长连接 Http报文分为两种 x
  • 记录一次json_decode 返回NULL解决过程

    后台返回数据 xff0c 前端收到数据之后 xff0c 在调用json decode 之后 xff0c 返回null 用json last error 报错 3 在解码前 xff0c 对字符串进行处理 data 61 preg replac
  • mybatis-plus之saveBatch开启批量插入

    背景 MyBatis Puls的saveBatch默认并没有批量添加 xff0c 实际上在插入的时候仍然是一条条记录的插 开启 在jdbc的url连接参数中添加 rewriteBatchedStatements 61 true
  • PHP 之 问题记录一

    临时设置时区 date default timezone set 39 PRC 39 获取当前毫秒数 span class token comment 1670834581421 span span class token keyword
  • HTTPS 之 请求头缺少HTTPOnly和Secure属性解决方案

    1 如果使用php 修改 php ini 的 session cookie httponly 和 session cookie secure 为 1 xff0c 重启php 2 如果使用nginx nginx conf 文件中设置 http
  • Linux 之 恢复删除文件

    方法一 如果进程ID还存在 xff0c 可以直接恢复 span class token number 1 span lsof span class token operator span span class token function
  • mybatis-plus 之 find_in_set使用

    MP中使用find in set函数 span class token class name LambdaQueryWrapper span span class token generics span class token punctu

随机推荐