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()); }
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; }