java用中点画圆法_OpenGL通过中点法绘制直线和圆
#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通过中点法绘制直线和圆相关推荐
- [XJTUSE]计算机图形学第二章作业,使用OpenGL编程实现DDA、中点画线和Bresenham算法和中点画圆法
首先是Windows10 + Visual Studio 2019 搭建OpenGL环境可以查看如下链接: 萌新向!!!Windows10 + Visual Studio 2019 搭建OpenGL环 ...
- 【OpenGL C++】画一个空心汉字和一个圆,并填充汉字(中点画线法,中点画圆法,种子填充法)
内容:画一个空心汉字和一个圆 设计一个画任意直线和圆的算法,可选所学的任一图形扫描转换算法(中点或bresenham算法),不能使用任何画线/画圆的API: 使用画线算法实现空心汉字的绘制,汉字必须为 ...
- 计算机图形学之画圆(中点画圆法、Bresenham画圆法)
参考学习了一些前辈的代码,总结了以下这个,感谢前人栽树,同时欢迎交流. 整个画圆利用了圆的八对称性,故只需画出八分之一圆就可利用对称性就可以画出整个圆. 专门写了一个函数来画圆的点,其中(x0,y0) ...
- 中点画线法c语言程序,计算机图形学 :中点画圆法
由于安装了easyx的vc6.0只能用initgraph(x,y)初始化一个x*y的第一象限的画板.所以对于书上的画圆法我们需要稍微进行一点改变.这个算法只能画1/8的圆,其它7/8的圆只能通过对称关 ...
- Bresenham画圆 正负画圆法 中点画圆法
这里做些代码的归纳 具体关于三种算法的区别,百度找找 其中的putpixel()函数为easyx库里面的绘点函数 // 使用 Bresenham 画圆法 void Circle_Bresenham(i ...
- 中点画椭圆算法_中点圆算法
中点画椭圆算法 中点圆算法 (Midpoint circle Algorithm) This is an algorithm which is used to calculate the entire ...
- 图形学---中点画线法---opengl中实现
目的: 为了优化DDA算法中的浮点数运算(DDA中每次+k运算,|k|<1,所以存在浮点数运算),达到整数运算,提高效率. 基本思想: 当前像素点为(xp,yp),下一像素点为P1或P2.设P1 ...
- java用中点画圆法_Bresenham画圆算法 与中点画圆法
Bresenham画圆算法 不失一般性,假设圆的圆心位于坐标原点(如果圆心不在原点,可以通过坐标平移使其与原点重合),半径为R.以原点为圆心的圆C有四条对称轴:x = 0, y = 0, x = y和 ...
- c语言计算机图形来画八分画圆,计算机图形学:中点画圆算法
在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...
最新文章
- 自定义组件 点击空白处隐藏
- 命令行中创建和打开模Android拟器
- c linux time微秒_qt linux系统获取当前时间(精确到毫秒、微秒)-Go语言中文社区...
- 正则基础之——神奇的转义
- C#实现网页加载后将页面截取成长图片 | Playwright版
- 【C语言】找出1000以内可以被3整除的数
- java面试题_208道Java面试题,
- 自动化初级工程师必读知识点总结(免费资料获取)
- R中统计假设检验总结
- Heroku第三方服务接入指南(二)
- gurobi和python_Gurobi Python建模环境使用介绍 第一部分准备 (v12最后更新2012
- 美团点评旅游搜索召回策略的演进
- pt100铂电阻的原理及用法
- Picasso 学习(含高斯模糊,圆头像,正方头像)
- 大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心
- 纯css制作“破镜重圆”效果
- 最新二开修复嗨Go理财分红商城完整源码+区块商城综合系统源码
- 【Servlet】2:认识一下Web服务器——Tomcat
- 稠密的无人机激光雷达点云数据处理与分析方法与工具科普系列(一)
- 服务器内置usb能否修改为外置,台式机内置的DVD刻录机可以改成外置的USB接口吗?...
热门文章
- Linux、Mac、windows 系统下 配置Python虚拟环境 virtualenvwrapper教程,workon切换环境, 非常简单方便
- docker安装nginx,配置nginx,并成功访问
- 【编程】基本程序设计模式
- react页面保留_如何在React中保留已登录的用户
- 声明式和命令式编程_命令式与声明式编程
- zlib.h: 没有那个文件或目录
- 2010年高教社杯全国大学生数学建模竞赛题目B题解析及层次分析法AHP在其中的应用
- Python高级——用多线程实现UDP聊天器
- 智能营销增益模型(Uplift Modeling)的原理与实践
- 基於MySQL+PHP的羽毛球費用查询网站设计