Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用中点算法在java中画圆_Java_Opengl_Graphics - Fatal编程技术网

用中点算法在java中画圆

用中点算法在java中画圆,java,opengl,graphics,Java,Opengl,Graphics,我试图用java中的中点算法画一个圆,但是这段代码没有给我一个定义良好的圆,有些点向下,有些点向上,所以我想在这里画一个定义良好的圆 import static org.lwjgl.opengl.GL11.*; 导入java.util.ArrayList; 导入java.util.Random; 导入org.lwjgl.opengl.Display; 导入org.lwjgl.opengl.DisplayMode; 导入助理4.图形; 导入org.lwjgl.LWJGLException; 导入o

我试图用java中的中点算法画一个圆,但是这段代码没有给我一个定义良好的圆,有些点向下,有些点向上,所以我想在这里画一个定义良好的圆

import static org.lwjgl.opengl.GL11.*;
导入java.util.ArrayList;
导入java.util.Random;
导入org.lwjgl.opengl.Display;
导入org.lwjgl.opengl.DisplayMode;
导入助理4.图形;
导入org.lwjgl.LWJGLException;
导入org.lwjgl.input.Keyboard;
导入org.lwjgl.input.Mouse;
公共类输入{
空圆(i`nt xc,int yc,int r`)//xc和yc是圆的中心,r是半径
{
int x,y,d;
d=1-r;
x=0;
y=r;
glBegin(GL_QUADS);
while(x0)
{
x+=1;
y-=1;
d+=1+2*x+1-2*y-1;
}
其他的
{
x++;
d+=2*x+1;
}
}
格伦德();
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
试一试{
Display.setDisplayMode(新的显示模式(640480));
Display.setTitle(“输入演示”);
Display.create();
}捕获(LWJGLEXE){
e、 printStackTrace();
Display.destroy();
系统出口(1);
}
glMatrixMode(GL_投影);
格洛托(0,640,480,0,1,-1);
glMatrixMode(GLU模型视图);
而(!Display.isCloseRequested()){
if(键盘.isKeyDown(键盘.KEY_退出)){
Display.destroy();
系统出口(0);
}
输入d1=新输入();
if(鼠标.isButtonDown(0)){
d1.圆圈(Mouse.getX(),480 Mouse.getY(),50);
}
Display.update();
显示同步(60);
}
Display.destroy();
}
}
另外,我希望这个圆圈不要用颜色填充


另外,有谁能帮我,告诉我如何用相同的算法绘制椭圆吗?我不熟悉您使用的API,但圆的粗糙边缘似乎是因为您使用整数而不是双精度或浮点,所以点不是很精确


请注意,我不太明白圆圈中发生了什么。d代表什么?

第二个四边形顶点的顺序有问题。必须交换第3个和第4个顶点坐标:

glVertex2f(y+xc,x+yc);
glVertex2f(y+xc,-x+yc);
glVertex2f(-y+xc,-x+yc);
glVertex2f(-y+xc,x+yc);
如果要绘制圆形轮廓,则需要使用类型
GL\u点
,而不是
GL\u四边形

glBegin(GL_点);
while(x 0){
x+=1;
y-=1;
d+=1+2*x+1-2*y-1;
}
否则{
x++;
d+=2*x+1;
}
}
格伦德();

谢谢你的工作,并给我一个明确的定义。你知道我需要添加什么来完成它而不是循环吗