`
haierboos
  • 浏览: 438262 次
文章分类
社区版块
存档分类
最新评论

【计算机图形学】二、椭圆的生成

 
阅读更多

1. 算法




2. 源代码

#include "stdafx.h"


#include "GL/glut.h"
#include "stdlib.h"

void init()
{
	glClearColor(1.0,1.0,1.0,0.0);
	
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(0.0,600.0,0.0,400.0);
}

inline int round(int x)
{
	return int(x+0.5);
}

void setPixel(int x, int y)
{
	glBegin(GL_POINTS);
	glVertex2i(x,y);
	glEnd();
}

void ellipsePlotPoints(int xc,int yc,int x,int y)
{
	setPixel(xc+x,yc+y);
	setPixel(xc-x,yc+y);
	setPixel(xc-x,yc-y);
	setPixel(xc+x,yc-y);
}

void ellipseMidPoint(int xc,int yc,int rx,int ry)
{
    int x, y, p1,p2;
	int rx2=rx*rx,ry2=ry*ry;
	x=0;
	y=ry;

	/*region 1*/
	ellipsePlotPoints(xc,yc,x,y);
	p1=round(rx2-(rx2*ry)+(0.25*rx2));
	while(ry2*x<=rx2*y)
	{
		if(p1<=0)
		{
            p1+=ry2*(2*x+3);
			x++;
		}
		else
		{
			p1+=ry2*(2*x+3)+rx2*(2-2*y);
            x++;
			y--;
		}
         ellipsePlotPoints(xc,yc,x,y);
	}

	/*region 2*/
	p2=round(ry2*(x+0.5)*(x+0.5)+rx2*(y-1)*(y-1)-rx2*ry2);
	while(y>=0)
	{
		if(p2<=0)
		{
			p2+=ry2*(2*x+2)+rx2*(3-2*y);
			x++;
	        y--;
		}
		else
		{
            p2+=rx2*(3-2*y);
			y--;
		}
		ellipsePlotPoints(xc,yc,x,y);
	}
}

void render()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0,0.0,0.0);
	
	ellipseMidPoint(200,200,180,150);
	ellipseMidPoint(400,200,80,160);
	
	glFlush();
}

int main(int argc, char* argv[])
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutInitWindowPosition(50,100);
	glutInitWindowSize(600,400);
	glutCreateWindow("ellipse");
	
	init();
	glutDisplayFunc(render);
	glutMainLoop();
	
	return 0;
}

3. 实验结果



分享到:
评论

相关推荐

    图形学\圆和椭圆的生成算法.doc

    图形学\圆和椭圆的生成算法.doc vc代码

    计算机图形学基本图形生成算法 MATLAB实现

    计算机图形学基本图形生成算法,MATLAB编程实现,其中包括直线生成算法,圆及椭圆生成算法,图形填充,变换等各种算法

    计算机图形学线、圆、椭圆的绘制

    线、圆、椭圆共八种常用算法模拟,支持缩放、交互式绘图、播放音乐/视频、背景设置

    计算机图形学椭圆、直线等

    计算机图形学大作业——要求编写用点画线,椭圆、区域填充、Bezier曲、B-样条曲线的生成

    计算机图形学圆的生成

    掌握基本曲线曲面的生成算法,并用C/WIN-TC/VC++实现算法,包括圆,椭圆,抛物线的生成算法。

    计算机图形学-电子版实验报告.doc

    计算机图形学实验报告:实验一:直线、圆、椭圆的生成;实验二:区域填充与图形裁剪;实验三:图形几何变换;实验四:自由曲线的绘制

    计算机图形学基础-pdf.zip

    1.1计算机图形学及其相关概念 1.2计算机图形学的发展 1.2.1计算机图形学学科的发展 1.2.2图形硬件设备的发展 1.2.3图形软件的发展 1.3计算机图形学的应用 1.3.1计算机辅助设计与制造 1.3.2计算机辅助...

    计算机图形学若干基本算法的拓展与改进研究.nh

    计算机图形学若干基本算法的拓展与改进研究

    计算机图形学 - 绘图系统(代码及文档).zip

    **基于 Qt5 ( C++ ) 开发的 计算机图形学 - 绘图系统** (计算机图形学 课程作业) 核心算法模块,完成了直线生成(DDA算法、Bresenham算法),多边形生成,椭圆生成(中点椭圆算法),曲线生成(Bezier和B-spline...

    计算机图形学常用的算法(包括源代码以及生成的.exe)

    常见的图形学代码,数值微分DDA、中点画线、Bresenham画线、中点画圆、中点画椭圆、递归种子、简单种子等等,由于里面还含有一点opencv知识,所以完全运行的安装opencv,里面含有源代码,以及生成的exe。几乎涵盖...

    《计算机图形学原理及算法教程》(Visual C++版)电子教案(课件)+配套源代码

    &lt;br&gt;详细了解计算机图形学原理及算法教程(Visual C++版) &lt;br&gt;目录: &lt;br&gt;第1章 基本图形的生成 1 1.1 直线 1 1.1.1 DDA(数值微分)算法 2 1.1.2 生成直线的中点画线法 2 1.1.3 Bresenham...

    计算机图形学实验(源程序)

    所搜集的这些源程序上包含了计算机图形学几乎所有的基本算法:简单的二维图形的生成二维填充图元的生成二维图形的剪裁二维图形一些基本变换、简单的曲线变换三维图形的变换 、面的消隐、平行投影直线生成、字符显示...

    计算机图形学C#绘图

    是计算机图形学的二维绘图程序,包括 1.图元的生成 直线.椭圆.区域填充 2.样条曲线的生成 Bezier曲线.B-样条曲线 3.分形图形的生成 Julia集.蕨类植物 4.真实感图形的生成

    基本图形生成原理

     通过编程实现直线、圆、椭圆生成,以掌握基本图形的生成原理和算法;实现不同的线宽和线型;即线的属性。并通过计时对同一种图元的不同生成算法进行比较,从而理解OpenGL图形函数库中不同的图元生成方法的效率。...

    计算机图形学pdf(可copy内容版)

    计算机图形学pdf 内容可copy 适合要学习开发3d游戏的朋友们学习 希望对大家有所帮助 目录: 第1章基本图形的生成 1.1 直线 1.1.1 生成直线的DDA 算法 1.1.2 生成直线的中点算法 1.1.2 生成直线的Bresenham算法 ...

    SDUWH计算机图形学实验--2020

    2020--SDUWH--计算机图形学实验 共20个实验 实验1 直线的绘制 实验2 直线的DDA生成算法 实验3 直线中点生成算法 实验4 直线Bresenham生成算法 实验5 中点画圆算法 实验6 中点画椭圆算法 实验7 多边形有序边表算法 ...

    计算机图形学的图形程序

    课件里的计算机图形学基本图元的生成工具,包括直线、圆、椭圆等的生成演示程序。

    计算机图形学实验23

    通过编程实现直线、圆、椭圆生成,以掌握基本图形的生成原理和算法;实现不同的线宽和线型;即线的属性。并通过计时对同一种图元的不同生成算法进行比较,从而理解OpenGL图形函数库中不同的图元生成方法的效率。同时...

    计算机图形学以及附带代码;计算机图形学原理及算法教程

    第2 章 二维图形 2.1 用户坐标到屏幕坐标的变换 2.1.1 窗口到视口的变换内容 2.1.2 窗口区到视图区的坐标变换 2.2 几何变换 2.1.1 基本变换 2.1.2 复合变换 2.1.3 几何变换程序设计案例 2.4 平面曲线图 2.4.1 正叶线...

    计算机图形学实验报告

    计算机图形学实验报告 SA03006073 魏思 介绍: 所有实验用一个MFC程序完成。组合成一个类似于画图程序。 程序左边面板上有所有的按钮,要完成功能只要点击相应按钮然后在客户区操作就可以了。 实验一、图元的生成 ...

Global site tag (gtag.js) - Google Analytics