[ create a new paste ] login | about

Link: http://codepad.org/oJZv75HG    [ raw code | output | fork ]

C++, pasted on Aug 7:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<GL/glut.h>

void drawCircle(double x, double y, double radius)
{
    int i;
    double PI=3.14159;
    int CIRCLE_RES=60;

    glBegin(GL_POLYGON);
    for(i=0; i<CIRCLE_RES; i++)
        glVertex2f(x + radius * cos((2. * PI * i) / CIRCLE_RES),
                   y + radius * sin((2. * PI * i) / CIRCLE_RES));
    glEnd();
}

void display()
{
    int i, j;
    int n=10;  // サイト数
    double x[100], y[100];  // サイトの座標
    double Lx[100];  // ラベルの幅。サイト毎に指定。
    double Ly;  // ラベルの高さ。一定。

    double LPx[1000], LPy[1000];  // ラベル候補の左下の角の座標
    int site[1000];  // ラベル候補iがサイトjのものならsite[i]=j
    int JOTAI[1000]; // ラベル候補の状態。
                     // 2ならラベル(位置決定)、なら候補(初期状態と同じ)
                     // 0なら削除されている。

    srand((unsigned int)time(NULL));
    rand();  // バグ対策

    glColor3f(0.0, 0.0, 0.0);
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    for( i=1; i<=n; i++ ) {
        // サイトの座標を乱数で指定(からまで)
        x[i] = rand()%1000+1;
        y[i] = rand()%1000+1;

        // ラベルの幅を乱数で指定(からまで刻み)
        Lx[i] = rand()%18 * 10 + 30;
    }
    // ラベルの高さを指定
    Ly = 30;


    // 各サイトに対し個のラベル候補を作成(座標)
    for( i=1; i<=n*4; i+=4 ) {
        site[i] = site[i+1] = site[i+2] = site[i+3] = i/4+1;

        LPx[i] = x[site[i]];            LPy[i] = y[site[i]];
        LPx[i+1] = x[site[i]]-Lx[site[i]];    LPy[i+1] = y[site[i]];
        LPx[i+2] = x[site[i]]-Lx[site[i]];    LPy[i+2] = y[site[i]]-Ly;
        LPx[i+3] = x[site[i]];          LPy[i+3] = y[site[i]]-Ly;
    }
    // 各サイトに対し個のラベル候補を作成(状態)
    for( i=1; i<=n*4; i++ ) {
        JOTAI[i] = 1;
    }


    JOTAI[1] = 2; // 何らかの処理により、位置が決まったとする。
    JOTAI[2] = 0; // 同じサイトの他のラベル候補は削除。
    JOTAI[3] = 0;
    JOTAI[4] = 0;


    // 頂点の表示
    for( i=1; i<=n; i++ ) {
        drawCircle(x[i],y[i],10.0);
    }


    // ラベル候補の表示
    for( i=1; i<=n*4; i++ ) {
        if( JOTAI[i]== 1 ) {
            glBegin(GL_LINE_LOOP);
              glVertex2f(LPx[i], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]+Ly);
              glVertex2f(LPx[i], LPy[i]+Ly);
            glEnd();
        }

        else if( JOTAI[i]== 0 ) {
            glBegin(GL_LINE_LOOP);
              glVertex2f(LPx[i], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]+Ly);
              glVertex2f(LPx[i], LPy[i]+Ly);
            glEnd();
            glBegin(GL_LINES);  // ×印
              glVertex2f(LPx[i], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]+Ly);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]);
              glVertex2f(LPx[i], LPy[i]+Ly);
            glEnd();
        }

        else if( JOTAI[i]== 2 ) {
            glLineWidth(3.0);  // 線を太く
            glBegin(GL_LINE_LOOP);
              glVertex2f(LPx[i], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]);
              glVertex2f(LPx[i]+Lx[site[i]], LPy[i]+Ly);
              glVertex2f(LPx[i], LPy[i]+Ly);
            glEnd();
            glLineWidth(1.0);  // 元の太さに
        }
    }


    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc,argv);

    glutInitWindowSize(400,400);  // ウィンドウサイズはx400ドット
    glutInitWindowPosition(600,300);  // ウィンドウサイズの表示位置の指定
    glutCreateWindow("simple");

    printf("開始します。何かキーを押してください。");  getchar();

    // 表示領域の範囲指定(.0から.0)まで。
    glOrtho(0.0, 1000.0, 0.0, 1000.0, -1.0, 1.0);

    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}


Output:
1
2
3
4
Line 19: error: GL/glut.h: No such file or directory
In function 'void drawCircle(double, double, double)':
Line 13: error: 'GL_POLYGON' was not declared in this scope
compilation terminated due to -Wfatal-errors.


Create a new paste based on this one


Comments: