编程实现椭圆的中点算法

    技术2022-05-19  58

    #include<iostream.h> #include<GL/glut.h> class wcPt2D { public: GLint x,y; }; #define ROUND(a) (int)(a+0.5) void setPixel(GLint x,GLint y) { glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); } void init(void) { glClearColor(1.0,1.0,1.0,0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,200.0,0.0,150.0); } void ellipsePlotPoints(int xCenter,int yCenter,int x,int y) { setPixel (xCenter + x, yCenter + y); setPixel (xCenter - x, yCenter + y); setPixel (xCenter + x, yCenter - y); setPixel (xCenter - x, yCenter - y); } void ellipseMidpoint(int xCenter, int yCenter, int Rx, int Ry) { int Rx2 = Rx * Rx; int Ry2 = Ry * Ry; int twoRx2 = 2 * Rx2; int twoRy2 = 2 * Ry2; int p; int x = 0; int y = Ry; int px = 0; int py = twoRx2 * y; void ellipsePlotPoints (int, int, int, int); ellipsePlotPoints (xCenter, yCenter, x, y); p = ROUND (Ry2 - (Rx2 * Ry) + (0.25 * Rx2)); while (px < py) { x++; px += twoRy2; if (p < 0) p += Ry2 + px; else { y--; py -= twoRx2; p += Ry2 + px - py; } ellipsePlotPoints (xCenter, yCenter, x, y); } p = ROUND (Ry2 * (x+0.5) * (x+0.5) + Rx2 * (y-1) * (y-1) - Rx2 * Ry2); while (y > 0) { y--; py -= twoRx2; if (p > 0) p += Rx2 - py; else { x++; px += twoRy2; p += Rx2 - py + px; } ellipsePlotPoints (xCenter, yCenter, x, y); } } void display(void) { wcPt2D mid; mid.x=100; mid.y=76; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,0.0,0.0); ellipseMidpoint(70,80,40,60); glFlush(); } int main(int argc,char**argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(50,100); glutInitWindowSize(400,300); glutCreateWindow("An Example OpenGl Program"); init();/// glutDisplayFunc(display) ;/ glutMainLoop(); return 0; }


    最新回复(0)