diff --git a/main.c b/main.c index 45296d4d892b7f12786a4554ef8e5b4dd19d774e..4e722c81cae7ea8ed62afc55a559cc5489ed7a08 100644 --- a/main.c +++ b/main.c @@ -45,6 +45,12 @@ double angleFromOrigin(int x, int y) { return acos(x/hip) * 180/PI; } +double angleFromPoint(int ox, int oy, int x, int y) { + //ox e oy são os pontos da nova referência + double hip = distance(o)nx, oy, x, y); + return acos((ox-x)/hip) * 180/PI; +} + void moverRobo(Robot *r, int x, int y){ /* Deveríamos "acionar os motores" * e realmente movimentar o robô @@ -87,11 +93,12 @@ int main(int argc, char const *argv[]) { for(int i=0; i < t_size; ++i) { // Pega o ângulo entre a posição do robô e o próximo ponto frame += tuplas[i].t; - double angle = angleFromOrigin(tuplas[i].x, tuplas[i].y); + double angle = angleFromPoint(r.x, r.y, tuplas[i].x, tuplas[i].y); + double turn = angle - r.theta; // angulo para girar o robo //printf("DEBUG: %f %f\n", angle, r.theta); fprintf(graph, "%d %d %d %f\n", tuplas[i].x, tuplas[i].y, frame, angle - r.theta); // Gira o robô - r.theta = angle; + r.theta += turn; // calcula a velocidade para as rodas distancia = distance(r.x, r.y, tuplas[i].x, tuplas[i].y); velocidade = velocity(distancia, tuplas[i].t);