计算机图形学椭圆Java代码,【计算机图形学】二、椭圆的生成

1. 算法

8ac05a6e031042c88ff5e3a4e478b4c1.png

3a4080e9c84e40378089bd2a7218b9c4.png

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. 实验结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值