注册 登录
编程论坛 C图形专区

求助:中点画圆算法生成的圆边上为何有四条切线?

qq1023569223 发布于 2011-03-24 12:58, 946 次点击
中点画圆算法,半径250,圆心(250,250),由中点在原点的同半径圆平移过来的!我并没有画线,为何生成的图中多了四条线,不解中???
程序代码:
#include <GL/glut.h>

void Circle(void)
{
    glColor3f(1.0,1.0,1.0);
   
    int p=1-250;
    int x=0,y=250;

    glBegin(GL_POINTS);  //画四个与轴的交点
    glVertex2i(250,500);
    glVertex2i(500,250);
    glVertex2i(250,0);
    glVertex2i(0,250);
    glEnd();

    for(int i=0;i<249;i++)
    {
        if(p<0)
        {
            x+=1;
            p+=2*x+1;
        }
        else
        {
            x+=1;
            y-=1;
            p+=2*x-2*y+1;
        }
        glBegin(GL_POINTS);  //画八个对称点
        glVertex2i(x+250,y+250);
        glVertex2i(-x+250,y+250);
        glVertex2i(x+250,-y+250);
        glVertex2i(-x+250,-y+250);
        glVertex2i(y+250,x+250);
        glVertex2i(-y+250,x+250);
        glVertex2i(y+250,-x+250);
        glVertex2i(-y+250,-x+250);
        glEnd();
    }
    glFlush();
}

void main(int argc,char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(600,600);
    glutCreateWindow("0810050225");

    glClearColor(0.0,0.0,0.0,0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,550.0,0.0,550.0);

    glutDisplayFunc(Circle);
    glutMainLoop();
}
运行结果如下图(多了四条线):
只有本站会员才能查看附件,请 登录



[ 本帖最后由 qq1023569223 于 2011-3-24 13:00 编辑 ]
2 回复
#2
御坂美琴2011-03-27 15:37
for(int i=0;i<249;i++)

你是画了250个点组成的线
#3
qq10235692232011-03-28 00:09
程序代码:
#include <GL/glut.h>
/*中点算法,四分圆*/
void Circle(void)
{
    glColor3f(1.0,1.0,1.0);
  
    int p=1-250;
    int x=0,y=250;

    glBegin(GL_POINTS);  //画四个与轴的交点
    glVertex2i(250,500);
    glVertex2i(500,250);
    glVertex2i(250,0);
    glVertex2i(0,250);
    glEnd();

    for(int i=0;i<249;i++)
    {
        if(p<0)
        {
            x+=1;
            p+=2*x+1;
        }
        else
        {
            x+=1;
            y-=1;
            p+=2*x-2*y+1;
        }
        glBegin(GL_POINTS);  //画四个个对称点
        glVertex2i(x+250,y+250);
        glVertex2i(-x+250,y+250);
        glVertex2i(x+250,-y+250);
        glVertex2i(-x+250,-y+250);
        /*glVertex2i(y+250,x+250);
        glVertex2i(-y+250,x+250);
        glVertex2i(y+250,-x+250);
        glVertex2i(-y+250,-x+250);
*/
        glEnd();
    }

    glFlush();
}

void main(int argc,char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(600,600);
    glutCreateWindow("0810050225");

    glClearColor(0.0,0.0,0.0,0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,550.0,0.0,550.0);

    glutDisplayFunc(Circle);
    glutMainLoop();
}
发现了一个错误,我写的是四分画圆,写成八分了。可是这样还是不对,到底哪里错了哟???
只有本站会员才能查看附件,请 登录
1