圖形的幾何變換

#include <GL/glut.h>

GLsizei winWidth = 600, winHeight = 500;    // Initial display window size.
GLint dataValue [4] = {0, 10, 50, 200};
GLint dert_x = 50,dert_y = 100;
GLint cos_angle = 0,sin_angle = 1; //旋轉角度的sin、cos值

void init (void)
{
    glClearColor (1.0, 1.0, 1.0, 1.0);    // White display window.
    glMatrixMode (GL_PROJECTION);
    gluOrtho2D (0.0, 600.0, 0.0, 500.0);
}

void lineGraph (void)
{
    GLint k;
    GLint x = 0;                        // Initialize x position for chart.
    GLint Sx = 2,Sy = 1;                //Scale times 
    GLint xf = 0,yf = 0;            //參考點座標

    glClear (GL_COLOR_BUFFER_BIT);       //  Clear display window.

    glColor3f (1.0, 0.0, 0.0);           //  Set line color to red.
    glBegin (GL_LINE_STRIP);             //  Plot data as a polyline.
        for (k = 0; k < 4; k++){
            glVertex2i (x + k*50, dataValue [k]);
        }
    glVertex2i (x, dataValue [0]);        
    glEnd ( );  


    //平移
    glColor3f (0.0, 0.0, 1.0);           //  Set line color to blue.
    glBegin (GL_LINE_STRIP);             //  Plot data as a polyline.
        for (k = 0; k < 4; k++){
            glVertex2i (x + k*50 + dert_x, dataValue [k] + dert_y);
        }
    glVertex2i (x + dert_x, dataValue [0] + dert_y);        
    glEnd ( );

    //縮放
    glColor3f (0.0, 1.0, 0.0);           //  Set line color 
    glBegin (GL_LINE_STRIP);             //  Plot data as a polyline.
        for (k = 0; k < 4; k++){
            glVertex2i (((x + k*50) - xf) * Sx + xf, (dataValue [k] - yf)*Sy + yf);
        }
    glVertex2i (x, dataValue [0]);        
    glEnd ( );

    //旋轉
    xf = 150,yf = 200;            //參考點座標
    glColor3f (0.0, 0.0, 1.0);           //  Set line color 
    glBegin (GL_LINE_STRIP);             //  Plot data as a polyline.
        for (k = 0; k < 4; k++){
            glVertex2i (((x + k*50) - xf) * cos_angle  + xf - (dataValue [k] - yf)*sin_angle, 
                        (dataValue [k] - yf)*cos_angle + yf + ((x + k*50) - xf) * sin_angle
                       );
        }

    glVertex2i (((x + 0*50) - xf) * cos_angle  + xf - (dataValue [0] - yf)*sin_angle, 
                 (dataValue [0] - yf)*cos_angle + yf + ((x + 0*50) - xf) * sin_angle
                );        
    glEnd ( );  
    glFlush ( );
}

void main (int argc, char** argv)
{
    glutInit (&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition (100, 100);
    glutInitWindowSize (winWidth, winHeight);
    glutCreateWindow ("Line Chart Data Plot");

    init ( );
    glutDisplayFunc (lineGraph);
    //glutReshapeFunc (winReshapeFcn);

    glutMainLoop ( );
}

截圖

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章