#include

#include

static int i=1;

void Initial(void)

{

glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //设置窗口背景颜色为白色

glMatrixMode(GL_PROJECTION); //指定设置投影参数

gluOrtho2D(-200.0,200.0,-200.0,200.0); //设置投影参数 //指的是视图范围,如果(0,200,0,200)的话就只能在第一象限显示,就1/4圆,第1,3的参数是左下角坐标,第2,4的参数是右上角坐标

}

/*void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口

glColor3f(1.0f, 0.0f, 0.0f); //设置当前的绘图颜色为红色

glRectf(50.0f, 100.0f, 150.0f, 50.0f); //绘制一个矩形

glFlush(); //处理所有的OpenGL程序

}

*/

void DDALine(int x0,int y0,int x1,int y1)

{

//glVertex2f(10,10);

int dx,dy,epsl,k;

float x,y,xIncre,yIncre;

dx = x1 - x0;

dy = y1 - y0;

x = x0;

y = y0;

if(abs(dx)>abs(dy))

epsl=abs(dx);

else

epsl=abs(dy);

xIncre=(float)dx/(float)epsl;

yIncre=(float)dy/(float)epsl;

glPointSize(2);

glBegin(GL_POINTS);

for(k = 0;k <= epsl; k++)

{

glColor3f(1.0f, 0.0f, 0.0f);

glVertex2f(int(x+0.5),int(y+0.5));

x += xIncre;

y += yIncre;

}

glEnd();

}

void Mid_B(int x0,int y0,int x1,int y1)

{

int dx,dy,d,UpIncre,DownIncre,x,y;

if(x0 > x1)

{

x = x1;

x1 = x0;

x0 = x;

y = y1;

y1 = y0;

y0 = y;

}

x = x0;

y = y0;

dx = x1 - x0;

dy = y1 - y0;

d = dx - 2*dy;

UpIncre = 2*dx - 2*dy;

DownIncre =- 2*dy;

glPointSize(2);

glBegin(GL_POINTS);

while(x <= x1)

{

glColor3f(1.0f, 0.0f, 0.0f);

glVertex2f(x,y);

x++;

if(d < 0)

{

y++;

d += UpIncre;

}

else

d += DownIncre;

}

glEnd();

}

void G_B(int x0,int y0,int x1,int y1)

{

int x,y,dx,dy,e;

dx = x1 - x0;

dy = y1 - y0;

e =- dx;

x=x0;

y=y0;

glPointSize(2);

glBegin(GL_POINTS);

while(x <= x1)

{

glColor3f(1.0f, 0.0f, 0.0f);

glVertex2f(x,y);

x++;

e = e + 2*dy;

if(e > 0)

{

y++;

e = e - 2*dx;

}

}

glEnd();

}

void CirclePoint(int x, int y)

{

glPointSize(2);

glBegin(GL_POINTS);

glColor3f(1.0f, 0.0f, 0.0f);

glVertex2f(x,y);

glVertex2f(y,x);

glVertex2f(-y,x);

glVertex2f(-x,y);

glVertex2f(-x,-y);

glVertex2f(-y,-x);

glVertex2f(y,-x);

glVertex2f(x,-y);

glEnd();

}

void MidBresenhamCircle(int r)

{

int x = 0, y = r, d = 1-r;

//glPointSize(2);

//glBegin(GL_POINTS);

while(x <= y)

{

CirclePoint(x,y);

if(d < 0)

d += 2*x+3;

else

{

d += 2*(x-y)+5;

y--;

}

x++;

}

glEnd();

}

void ProcessMenu(int value)

{

i = value;

glutPostRedisplay();

}

void Display(void)

{

glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口

glViewport(0,0,400,400); //前两个参数改变原点坐标,后两个参数改变图形长宽(放大缩小)

switch(i)

{

case 1:

DDALine(2,3,55,83);

break;

case 2:

Mid_B(2,3,55,83);

break;

case 3:

G_B(2,3,55,83);

break;

case 4:

MidBresenhamCircle(50);

break;

}

glFlush();

}

int main(int argc, char* argv[])

{

glutInit(&argc, argv); //初始化GLUT库,处理命令行参数

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化窗口的显示模式

glutInitWindowSize(400,400); //设置窗口的尺寸

glutInitWindowPosition(100,100); //设置窗口的位置

glutCreateWindow("直线"); //创建一个名为矩形的窗口

int MainMenu = glutCreateMenu(ProcessMenu); //创建主菜单

glutAddMenuEntry("DDA算法",1);

glutAddMenuEntry("中点Bresenham算法",2);

glutAddMenuEntry("改进的Bresenham算法",3);

glutAddMenuEntry("中点bresenham画圆",4);

glutAttachMenu(GLUT_RIGHT_BUTTON);

glutDisplayFunc(Display); //设置当前窗口的显示回调函数

Initial(); //完成窗口初始化

glutMainLoop(); //启动主GLUT事件处理循环

return 0;

}

java用中点画圆法_OpenGL通过中点法绘制直线和圆相关推荐

  1. [XJTUSE]计算机图形学第二章作业,使用OpenGL编程实现DDA、中点画线和Bresenham算法和中点画圆法

    首先是Windows10 + Visual Studio 2019 搭建OpenGL环境可以查看如下链接: 萌新向!!!Windows10 + Visual Studio 2019 搭建OpenGL环 ...

  2. 【OpenGL C++】画一个空心汉字和一个圆,并填充汉字(中点画线法,中点画圆法,种子填充法)

    内容:画一个空心汉字和一个圆 设计一个画任意直线和圆的算法,可选所学的任一图形扫描转换算法(中点或bresenham算法),不能使用任何画线/画圆的API: 使用画线算法实现空心汉字的绘制,汉字必须为 ...

  3. 计算机图形学之画圆(中点画圆法、Bresenham画圆法)

    参考学习了一些前辈的代码,总结了以下这个,感谢前人栽树,同时欢迎交流. 整个画圆利用了圆的八对称性,故只需画出八分之一圆就可利用对称性就可以画出整个圆. 专门写了一个函数来画圆的点,其中(x0,y0) ...

  4. 中点画线法c语言程序,计算机图形学 :中点画圆法

    由于安装了easyx的vc6.0只能用initgraph(x,y)初始化一个x*y的第一象限的画板.所以对于书上的画圆法我们需要稍微进行一点改变.这个算法只能画1/8的圆,其它7/8的圆只能通过对称关 ...

  5. Bresenham画圆 正负画圆法 中点画圆法

    这里做些代码的归纳 具体关于三种算法的区别,百度找找 其中的putpixel()函数为easyx库里面的绘点函数 // 使用 Bresenham 画圆法 void Circle_Bresenham(i ...

  6. 中点画椭圆算法_中点圆算法

    中点画椭圆算法 中点圆算法 (Midpoint circle Algorithm) This is an algorithm which is used to calculate the entire ...

  7. 图形学---中点画线法---opengl中实现

    目的: 为了优化DDA算法中的浮点数运算(DDA中每次+k运算,|k|<1,所以存在浮点数运算),达到整数运算,提高效率. 基本思想: 当前像素点为(xp,yp),下一像素点为P1或P2.设P1 ...

  8. java用中点画圆法_Bresenham画圆算法 与中点画圆法

    Bresenham画圆算法 不失一般性,假设圆的圆心位于坐标原点(如果圆心不在原点,可以通过坐标平移使其与原点重合),半径为R.以原点为圆心的圆C有四条对称轴:x = 0, y = 0, x = y和 ...

  9. c语言计算机图形来画八分画圆,计算机图形学:中点画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

最新文章

  1. 自定义组件 点击空白处隐藏
  2. 命令行中创建和打开模Android拟器
  3. c linux time微秒_qt linux系统获取当前时间(精确到毫秒、微秒)-Go语言中文社区...
  4. 正则基础之——神奇的转义
  5. C#实现网页加载后将页面截取成长图片 | Playwright版
  6. 【C语言】找出1000以内可以被3整除的数
  7. java面试题_208道Java面试题,
  8. 自动化初级工程师必读知识点总结(免费资料获取)
  9. R中统计假设检验总结
  10. Heroku第三方服务接入指南(二)
  11. gurobi和python_Gurobi Python建模环境使用介绍 第一部分准备 (v12最后更新2012
  12. 美团点评旅游搜索召回策略的演进
  13. pt100铂电阻的原理及用法
  14. Picasso 学习(含高斯模糊,圆头像,正方头像)
  15. 大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心
  16. 纯css制作“破镜重圆”效果
  17. 最新二开修复嗨Go理财分红商城完整源码+区块商城综合系统源码
  18. 【Servlet】2:认识一下Web服务器——Tomcat
  19. 稠密的无人机激光雷达点云数据处理与分析方法与工具科普系列(一)
  20. 服务器内置usb能否修改为外置,台式机内置的DVD刻录机可以改成外置的USB接口吗?...

热门文章

  1. Linux、Mac、windows 系统下 配置Python虚拟环境 virtualenvwrapper教程,workon切换环境, 非常简单方便
  2. docker安装nginx,配置nginx,并成功访问
  3. 【编程】基本程序设计模式
  4. react页面保留_如何在React中保留已登录的用户
  5. 声明式和命令式编程_命令式与声明式编程
  6. zlib.h: 没有那个文件或目录
  7. 2010年高教社杯全国大学生数学建模竞赛题目B题解析及层次分析法AHP在其中的应用
  8. Python高级——用多线程实现UDP聊天器
  9. 智能营销增益模型(Uplift Modeling)的原理与实践
  10. 基於MySQL+PHP的羽毛球費用查询网站设计