Как найти угол между двумя векторами ?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как найти угол между двумя векторами ?

Сообщение Dymanski200 24 мар 2017, 18:05

Здравствуйте. Помогите найти угол между векторами, если один известный, а другой переменный.
Изображение
Открыл учебник по геометрии. Сделал всё по формулам, но выходит какие-то неправильные цифры.
Синтаксис:
Используется csharp
                VectorA.x = 0;
                VectorA.y = 10;
                VectorB.x = CoordinateTap.x - Scale/2 ;
                VectorB.y = CoordinateTap.y - Scale/2 ;

                Scalar = VectorA.x * VectorB.x + VectorA.y * VectorB.y;

                VectorAL = Mathf.Sqrt ((VectorA.x * VectorA.x) + (VectorA.y * VectorA.y));
                VectorBL = Mathf.Sqrt ((VectorB.x * VectorB.x) + (VectorB.y * VectorB.y));
                Cos = Scalar / (VectorAL * VectorBL);
                Angle = Mathf.Acos (Cos) * 180 / Mathf.PI ;

Мучаюсь уже неделю. Подскажите, можно ли сделать это проще ? Заранее спасибо
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Как найти угол между двумя векторами ?

Сообщение Tolking 24 мар 2017, 18:26

float angle= Vector3.Angle(new Vector3(VectorA.x,VectorA.y,0),new Vector3(VectorB.x,VectorB.y,0));
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как найти угол между двумя векторами ?

Сообщение Dymanski200 24 мар 2017, 19:35

Спасибо. А почему если я ставлю палец в точку A (как на рисунке), то градусная мера 20, хотя должно быть 0 ?
В моём коде была точно такая же ошибка, хотя всё работало. Подскажите как исправить ? Мне нужно чтобы отсчёт начинался с точки A
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Как найти угол между двумя векторами ?

Сообщение Yaro 25 мар 2017, 21:17

у меня почему-то Vector2.Angle и Vector3.Angle в не зависимости от векторов почему-то всегда показывает 90, косяк какой-то

можно через арктангенс
Синтаксис:
Используется csharp
float BA_Rad = Mathf.Atan2 (A.y - B.y, A.x - B.x);
float BC_Rad = Mathf.Atan2 (C.y - B.y, C.x - B.x);
float CA_Ang = (BA_Rad - BC_Rad ) / Math.PI * 180.0f;


Что значит отсчета от A? ABC это угол, он не имеет точку отсчета
Yaro
UNIт
 
Сообщения: 86
Зарегистрирован: 20 сен 2016, 21:44

Re: Как найти угол между двумя векторами ?

Сообщение NOVA 26 мар 2017, 08:33

Tolking писал(а):float angle= Vector3.Angle(new Vector3(VectorA.x,VectorA.y,0),new Vector3(VectorB.x,VectorB.y,0));

Помоему это что-то странное.
VectorOne=A-B; если A и B это вектора координат.
VectorTwo=C-B;
float angle= Vector3.Angle(VectorOne,VectorTwo)
Аватара пользователя
NOVA
Адепт
 
Сообщения: 1741
Зарегистрирован: 17 май 2011, 11:45
Откуда: Дядя Саша from Mother Russia


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 26