diff --git a/main.c b/main.c index b516909d509d1a5d70af6570712d60fc637fe457..3811bce263c632ddbf5cb9332017a366796873ae 100644 --- a/main.c +++ b/main.c @@ -26,6 +26,24 @@ double distance(int xa, int ya, int xb,int yb){ return (sqrt((xb-xa)*(xb-xa) + (yb-ya)*(yb-ya))); } +// Retorna o ângulo em relação a origem (0,0) +double angleFromOrigin(int x, int y) { + /** + * Y + * ^ + * |--* + * | /| + * |/ | + * +----------> X + * | + * 1. Sabendo os valores de x e y, calculamos a hipotenusa + * 2. Com o valor de X e da Hip, temos o seno do ângulo formado entre a hipotenusa e o eixo X + * 3. Fazemos a função arco seno para pegar o valor do ângulo (em radianos) + */ + double hip = x*x + y*y; + return asin(x/hip); +} + int main(int argc, char const *argv[]) { int t_size; double velocidade, distancia; @@ -48,10 +66,11 @@ int main(int argc, char const *argv[]) { scanf("%d %d %d", &tuplas[i].x, &tuplas[i].y, &tuplas[i].t); } - // calcular velocidade das rodas entre cada coordenada for(int i=0; i < t_size; ++i) { - // pega o ângulo entre a posição do robô e o próximo ponto - // gira o robô + // Pega o ângulo entre a posição do robô e o próximo ponto + double angle = angleFromOrigin(tuplas[i].x, tuplas[i].y); + // Gira o robô + r.theta = angle; // calcula a velocidade para as rodas distancia = distance(r.x, r.y, tuplas[i].x, tuplas[i].y); velocidade = velocity(distancia, tuplas[i].t);