2016-11-16 12 views
0

Мы пытаемся, чтобы получить значение соз между V и U, но мы получаем результаты намного выше, чем 1 или меньше 0Как рассчитать угол между двумя векторами?

Где:

vx = in.nextInt(); // x speed of your pod 
vy = in.nextInt(); // y speed of your pod 

int ux = nextCheckPointIdX - x; 
int uy = nextCheckPointIdY - y; 

Вот формула:

double cos = (vx*ux + vy*uy)/(Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) + Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2))); 

Вы обнаружили ошибки в предыдущей строке?

+3

Скалярное произведение двух векторов на косинус угла между раз * продукт * их длины – harold

+0

@harold Я редактировал вопрос, мы не хотим, чтобы продукт –

+1

Вы хотите сделать продукт. Как я уже сказал, точечным произведением двух векторов является 'cos (angle) * | A | * | B | ', поэтому, чтобы извлечь часть' cos (angle) ', которую вы должны разделить на произведение длин. В этой формуле нет сумм длин, на самом деле это редко бывает вообще. – harold

ответ

1

Знаменатель столкнулся с проблемой.

int num = (vx*ux + vy*uy); 
double den = (Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2)) * (Math.sqrt(Math.pow(ux, 2) + Math.pow(uy, 2)))); 
double cos = num/den; 
System.out.println(cos); 
System.out.println(Math.acos(cos)); 
+0

@bradimus Это сработало? Если да, добросердечно отмечайте как принятый ответ. –

+0

Это не мой вопрос, но я буду голосовать. – bradimus

+0

Спасибо. @bradimus –

 Смежные вопросы

  • Нет связанных вопросов^_^