如何在OpenGL中绘制半圆

4

我使用以下代码成功绘制了一个完整的圆形(可能存在代码文本中的打字错误):

drawCircle(GLAutodrawble drawble){
  GL gl = drawble.getGL();
  gl.glTranslatef(0.0f,0.0f,-7.0f);
  gl.glBeginf(GL_LINE_LOOP);
  gl.glColorf(0.0f,0.0f,0.0);
  final dobule  PI = 3.141592654;
  double angle = 0.0;
  int points = 100;
  for(int i =0; i < points;i++){
    angle = 2 * PI * i / points;
    gl.glVertexf((float)Math.cos(angle),(float)Math.sin(angle));
  }
  gl.glScalef(1.0f,1.0f,0.0f);
  gl.glEnd();
}

我希望能够使用相同的原理来制作半圆形状,但我不知道如何处理cos和sin等内容。有谁可以看一下并帮助我。

感谢所有看一下这个问题的人!


1
你试过 for(int i =0; i < points/2;i++){ 吗? :) - Rekin
2
那样做不就只用50个点画整个圆吗?不过我会试试看。 - TimTimTim
3个回答

5

替换:

angle = 2 * PI * i / points;

使用:

angle = PI * i / points;

请注意,我去掉了2乘数因为2*PI是360(以度为单位),这是一个完整的圆。PI(180度)是一个半圆。

(注:该段文字解释了为什么在计算圆的周长时,不需要使用2乘PI,而只需要使用PI即可。)


既然我从0.0 0.0开始,当我执行angle = PI * i / Points时,我不应该得到负数吗?sin(angle).... 不行,我明白了,是在负y轴上的半圆,那么我如何切换,使得我只在负Y坐标上得到半圆呢? - TimTimTim
将 (float)Math.sin(angle) 更改为 (float)Math.sin(-angle)。 - giorashc

2

将这一行改为:

angle = 2 * PI * i / points;

转换为:

angle = 1 * PI * i / points;

0
画圆形就像画线一样,将它们连接起来。点应该太靠近才能创建平滑曲线。 您可以使用以下代码在OpenGL中绘制半圆。
 float PI = 3.14
 float step=5.0;// How far is the next point i.e it should be small value
 glBegin(GL_LINE_STRIP)
 for(float angle=0.0f,angle<=180; angle+=step)
 {
    float rad  = PI*angle/180;
   x  = centerX+radius*cos(rad);
   y  = centerY+radius*sin(rad);
   glVertex(x,y,0.0f);

}
glEnd();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接