Raio Camera::tracarRaio(float x, float y) { //incerteza no near vec4 direcao(x,y,this->near, 0); Raio R(vec4(0,0,0 ,1), direcao); return R; }
int main() { PIC P1, P2, P; PIC Nave[16]; WINDOW *w1; MASK msklua, msknave[16]; /* posicoes e velocidades das naves */ int posx1, posy1, posx2, posy2, i, dir1, dir2; double velx1, vely1, velx2, vely2; w1 = InitGraph(801,801, "NightSky"); P = NewPic(w1, 801, 801); // será a pic que mantém o estado da janela (universo + lua) P1 = ReadPic(w1, "Sky.xpm", NULL); // pic do universo P2 = ReadPic(w1, "Moon.xpm", NULL); // pic da lua for (i=0; i<16; i++) msknave[i] = NewMask(w1, 35, 35); /* carrega as imagens da nave */ Nave[0] = ReadPic(w1, "Nave0.xpm", msknave[0]); Nave[1] = ReadPic(w1, "Nave1.xpm", msknave[1]); Nave[2] = ReadPic(w1, "Nave2.xpm", msknave[2]); Nave[3] = ReadPic(w1, "Nave3.xpm", msknave[3]); Nave[4] = ReadPic(w1, "Nave4.xpm", msknave[4]); Nave[5] = ReadPic(w1, "Nave5.xpm", msknave[5]); Nave[6] = ReadPic(w1, "Nave6.xpm", msknave[6]); Nave[7] = ReadPic(w1, "Nave7.xpm", msknave[7]); Nave[8] = ReadPic(w1, "Nave8.xpm", msknave[8]); Nave[9] = ReadPic(w1, "Nave9.xpm", msknave[9]); Nave[10] = ReadPic(w1, "Nave10.xpm", msknave[10]); Nave[11] = ReadPic(w1, "Nave11.xpm", msknave[11]); Nave[12] = ReadPic(w1, "Nave12.xpm", msknave[12]); Nave[13] = ReadPic(w1, "Nave13.xpm", msknave[13]); Nave[14] = ReadPic(w1, "Nave14.xpm", msknave[14]); Nave[15] = ReadPic(w1, "Nave15.xpm", msknave[15]); /* Máscara para a Lua */ msklua = NewMask(w1, 205, 205); WFillArc(msklua, 0, 0, 0, 360*64, 205, 205, 1); /* Desenha o arquivo Sky.xpm */ PutPic(w1, P1, 0, 0, 800, 800, 0, 0); /* desenha Lua na janela principal */ SetMask(w1,msklua); PutPic(w1, P2, 0, 0, 205, 205, 300, 300); UnSetMask(w1); /* P recebe tela base */ PutPic(P, w1, 0, 0, 801, 801, 0, 0); /* Lê duas linhas (uma para nave 1 e outra para nave 2 e as desenha na tela (apagando o que tinha antes) */ while (true)){ scanf("%d %d %lf %lf", &posx1, &posy1, &velx1, &vely1); scanf("%d %d %lf %lf", &posx2, &posy2, &velx2, &vely2); dir1 = direcao(velx1, vely1); dir2 = direcao(velx2, vely2); imprimetela(w1, P, Nave[dir1], msknave[dir1], Nave[dir2], msknave[dir2], posx1, posy1, posx2, posy2); } CloseGraph(); return 0; }
void markov(pessoa *p, double deltaT) { /*A funcao markov ira determinar uma probabilidade de 65% de chance de continuar na mesma direção e 5% para cada outra direção.*/ int mkv[8]; double vel; int i, sort, dir; dir = direcao(p->atr.vel.x, p->atr.vel.y); vel = modulo(p->atr.vel); for(i = 0; i < 8; i++) if(i == dir) mkv[i] = 65; else if(i > dir) mkv[i] = 65 + (i)*5; else if(i < dir) mkv[i] = 65 + (i + 1)*5; sort = rand() % 100; if(sort >= 65) for(i = 0; i < 8; i++) { if(i != dir) { if(sort < mkv[i]) { dir = i; i = 8; } } } switch(dir) { case L: p->atr.vel.x = (int) vel; p->atr.vel.y = 0; p->atr.pos.x += (int) vel*deltaT; break; case NE: p->atr.vel.x = vel*cos(M_PI/4); p->atr.vel.y = vel*sin(M_PI/4); p->atr.pos.x += (int) vel*cos(M_PI/4)*deltaT; p->atr.pos.y -= (int) vel*sin(M_PI/4)*deltaT; break; case N: p->atr.vel.x = 0; p->atr.vel.y = vel; p->atr.pos.y -= (int) vel*deltaT; break; case NO: p->atr.vel.x = vel*cos(M_PI/4)*(-1); p->atr.vel.y = vel*sin(M_PI/4); p->atr.pos.x += (int) vel*cos(M_PI/4)*(-1)*deltaT; p->atr.pos.y -= (int) vel*sin(M_PI/4)*deltaT; break; case O: p->atr.vel.x = vel*(-1); p->atr.vel.y = 0; p->atr.pos.x -= (int) vel*deltaT; break; case SO: p->atr.vel.x = vel*cos(M_PI/4)*(-1); p->atr.vel.y = vel*sin(M_PI/4)*(-1); p->atr.pos.x += (int) vel*cos(M_PI/4)*(-1)*deltaT; p->atr.pos.y -= (int) vel*sin(M_PI/4)*(-1)*deltaT; break; case S: p->atr.vel.x = 0; p->atr.vel.y = vel*(-1); p->atr.pos.y -= (int) vel*(-1)*deltaT; break; case SE: p->atr.vel.x = vel*cos(M_PI/4); p->atr.vel.y = vel*sin(M_PI/4)*(-1); p->atr.pos.x += (int) vel*cos(M_PI/4)*deltaT; p->atr.pos.y -= (int) vel*sin(M_PI/4)*(-1)*deltaT; break; } }