Страница 1 из 1

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

СообщениеДобавлено: 24 мар 2017, 18:05
Dymanski200
Здравствуйте. Помогите найти угол между векторами, если один известный, а другой переменный.
Изображение
Открыл учебник по геометрии. Сделал всё по формулам, но выходит какие-то неправильные цифры.
Синтаксис:
Используется 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 ;

Мучаюсь уже неделю. Подскажите, можно ли сделать это проще ? Заранее спасибо

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

СообщениеДобавлено: 24 мар 2017, 18:26
Tolking
float angle= Vector3.Angle(new Vector3(VectorA.x,VectorA.y,0),new Vector3(VectorB.x,VectorB.y,0));

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

СообщениеДобавлено: 24 мар 2017, 19:35
Dymanski200
Спасибо. А почему если я ставлю палец в точку A (как на рисунке), то градусная мера 20, хотя должно быть 0 ?
В моём коде была точно такая же ошибка, хотя всё работало. Подскажите как исправить ? Мне нужно чтобы отсчёт начинался с точки A

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

СообщениеДобавлено: 25 мар 2017, 21:17
Yaro
у меня почему-то 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 это угол, он не имеет точку отсчета

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

СообщениеДобавлено: 26 мар 2017, 08:33
NOVA
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)