Exemple #1
0
void OpenGLWindow::resizeGl()
{
    context->makeCurrent(this);

    renderer->setSize(width(), height());
    renderer->pMatrix.setToIdentity();
    float FOVvert = 60.0;
    float aspectRatio = (float) width() / (float) height();
    float nearPlane = 0.1;
    float farPlane = 1000;
    renderer->pMatrix.perspective(FOVvert, aspectRatio, nearPlane, farPlane);

#define PI 3.14159265359

    //Near
    float nearVert = nearPlane*tanf(FOVvert/2 * PI/180);
    float nearHorz = nearVert*aspectRatio;
    //qDebug() << "nearVert" << nearVert;
    //qDebug() << "nearHorz" << nearHorz;
    QVector4D NLL(-nearHorz,-nearVert,-nearPlane,1);
    QVector4D NLR(nearHorz,-nearVert,-nearPlane,1);
    QVector4D NUL(-nearHorz,nearVert,-nearPlane,1);
    QVector4D NUR(nearHorz,nearVert,-nearPlane,1);

    //Far
    float farVert = farPlane*tanf(FOVvert/2 * PI/180);
    float farHorz = farVert*aspectRatio;
    //qDebug() << "farVert" << farVert;
    //qDebug() << "farHorz" << farHorz;
    QVector4D FLL(-farHorz,-farVert,-farPlane,1);
    QVector4D FLR(farHorz,-farVert,-farPlane,1);
    QVector4D FUL(-farHorz,farVert,-farPlane,1);
    QVector4D FUR(farHorz,farVert,-farPlane,1);

    renderer->frustumCorners.clear();
    renderer->frustumCorners.push_back(NLL);
    renderer->frustumCorners.push_back(NLR);
    renderer->frustumCorners.push_back(NUL);
    renderer->frustumCorners.push_back(NUR);
    renderer->frustumCorners.push_back(FLL);
    renderer->frustumCorners.push_back(FLR);
    renderer->frustumCorners.push_back(FUL);
    renderer->frustumCorners.push_back(FUR);
/*
    qDebug() << "NLL" << NLL;
    qDebug() << "NLR" << NLR;
    qDebug() << "NUL" << NUL;
    qDebug() << "NUR" << NUR;
    qDebug() << "FLL" << FLL;
    qDebug() << "FLR" << FLR;
    qDebug() << "FUL" << FUL;
    qDebug() << "FUR" << FUR;
*/

    renderer->pMatrixInv = renderer->pMatrix;
    renderer->pMatrixInv.inverted();

    glViewport(0, 0, width(), height());
}
Exemple #2
0
int main()
{
    Next[0][0] = -1; Next[0][1] = 0;
    Next[1][0] = 0; Next[1][1] = 1;
    Next[2][0] = 1; Next[2][1] = 0;
    Next[3][0] = 0; Next[3][1] = -1;

    int i;
    int x, y;
    char in[10];
    int now;
    while(1)
    {
        scanf("%s", name);
        if(!strcmp(name, "END"))    break;

        memset(matrix, 0, sizeof(matrix));
        memset(visit, 0, sizeof(visit));
        memset(q_list, -1, sizeof(q_list));

        scanf("%d %d %c %d %d", &sta_y, &sta_x, &sta_way, &end_y, &end_x);

        while(1)
        {
            scanf("%d", &x);
            if(x==0)    break;
            scanf("%d", &y);
            while(1)
            {
                scanf("%s", in);
                if(!strcmp(in, "*"))   break;
                int tmp = change(in[0]);
                now = 1;
                while(1)
                {
                    if(now == strlen(in))   break;
                    matrix[x][y].dir[tmp][FLR(tmp, in[now])] = 1;
                    now++;
                }
            }
        }

        imp[0].x = sta_x;
        imp[0].y = sta_y;
        imp[0].opcode = change(sta_way);
        find = 0;
        find_num = -1;

        BFS();

        printf("%s\n", name);
        if(find == 1){
            int now2 = 0;
            int Temp[500];
            int st = find_num;
            while(st != -1){
                Temp[now2] = st;
                st = q_list[st];
                now2++;
            }

            int Ans[500];
            for(i = now2-1; i >= 0; i--){
                Ans[now2-1-i] = Temp[i];
            }

            printf("  ");
            for(i = 0; i < now2; i++){
                printf("(%d,%d)", imp[Ans[i]].y, imp[Ans[i]].x);
                if(!((i+1)%10))     printf("\n  ");
                else    printf(" ");
            }
            printf("(%d,%d)\n", end_y, end_x);
        } else{
            printf("  No Solution Possible\n");
        }
    }
    return 0;
}