OpenGL中点Bresenham绘制直线算法
本文实例为大家分享了OpenGL中点Bresenham绘制直线算法,供大家参考,具体内容如下
环境
macosxcode编译器
代码
#include#include #include #include #include usingnamespacestd; floatwid=400;//设置窗口的大小,约定窗口必须为正方形 floatheight=wid;//设置窗口的大小 intnumbers=20;//设置划分的网格的个数 floatt=wid/numbers;//模拟像素下的单位1 /* 参数设置说明: 输入直线的两点A(x1,y1);B(x2,y2) 您应当确保参数范围在-400~400.且为整数。 *支持不同斜率 *支持两点位置颠倒 */ intx1=-300,y1=-400,x2=400,y2=100; voiddraw_point(floatx,floaty,intk_kind,intd_kind); floattranslater(intx); voidswap(int&a,int&b) {inttmp=0; tmp=b; b=a; a=tmp;} voidbresenham(intx1,inty1,intx2,inty2){ /* 函数说明:bresenham算法部分 参数说明:与openGL已有的划线函数一样,要求用户提供的是点的起点(x1,y1)和终点(x2,y2) 为了便于观察,我们会绘制原像素下的直线。 这里的坐标要求是-1~1 */ intk_kind=0;//k_kind用来表示斜率的类型。0是0~1;1是1~无穷;2是0~-1;3是负无穷~-1 intd_kind=0;//d_kind用来表示dy正负的类型。 if(x1>x2){ swap(x1,x2); swap(y1,y2); } intdx=abs(x2-x1),dy=abs(y2-y1); if(y1>y2){//如果是向下的 y1=-y1; y2=-y2; d_kind=1; } if(dy>dx){//斜率介于1~无穷的,将看作坐标系变换(这里将坐标变换)。 swap(x1,y1); swap(x2,y2); swap(dx,dy); k_kind=1; } floatd=(dy+dy-dx)*t;//令d为决策量(这里利用d=dx*w*2避免浮点运算) floatx=x1+0.0,y=y1+0.0; draw_point(translater(x),translater(y),k_kind,d_kind);//绘制下一个点 while(x 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。