Дадени две координати, как можете да намерите ъгъла от вертикалата (като циферблат на часовник)

Създавам проста 2D игра от птичи поглед, в която героят може да гледа във всяка посока, посоката, към която е обърнат героят, ще бъде дадена в радиани.

При два набора от координати (точка a и b) как да намеря ъгъла между линията, директно вертикална от a, и линията, получена от a до b? Този ъгъл ще бъде от 0 до 360 (въпреки че 360 ще се третира като 0).

http://i.stack.imgur.com/J9TAU.png

В тази диаграма точка a е центърът, а точка b е тази на ръба. Линията, простираща се от a, е позицията 0 и линията, от която ще изчислите ъгъла. Точката b може да е навсякъде в окръжността и трябва да намеря радианите на ъгъла вдясно от линията 0.


person Jamal Moir    schedule 31.01.2015    source източник


Отговори (2)


Мина известно време, откакто го изучавах в училище, но ако точка Б е върху единичната окръжност, това трябва да е доста тривиална математическа задача.

A - Ако е в радиани, няма да е 0-360!

B - Ако Y >= 0, ъгъл = arccos(x); иначе ъгъл = TWOPI - arccos(x)

Обичайната формулировка е, че ъгъл=0 е по +X, а не по +Y. Ще трябва да се помрънкате малко, за да получите това, което искате. Но това трябва да е достатъчно, за да ви тласне в правилната посока.

person wrosecrans    schedule 31.01.2015
comment
Хаха да, това беше глупаво! Току що се събудих! А, да, това изглежда добре, благодаря. Опитвах се да го направя чрез CAST диаграма, но това означаваше, че трябва да направя различно изчисление в зависимост от това в кой квадрант беше, чувствах, че трябва да има по-добър начин. наздраве! - person Jamal Moir; 31.01.2015

Можете да използвате функцията atan, която имат много езици за програмиране. От вертикалата ъгълът до точка B ще бъде:

pi/2 - atan(x, y)

Където x и y са координатите на точка B по отношение на A. Имайте предвид, че това може да е отрицателно, така че ще трябва да направите някои модулни аритметики, за да го получите положително (ако ви е грижа за това.)

Освен това това всъщност не е подходящ въпрос за StackOverflow, тъй като е математически въпрос, а не програмен.

person Benjamin Murphy    schedule 31.01.2015
comment
Благодаря, а не е ли? Извинявам се. - person Jamal Moir; 31.01.2015
comment
Между другото, какво имаш предвид под atan(x, y)? - person Jamal Moir; 31.01.2015
comment
Арктангенс, който има всяка стандартна математическа библиотека. - person Benjamin Murphy; 01.02.2015
comment
Да, знаех, че е арктангенс, но (x, y)? Каква е тази запетая? - person Jamal Moir; 02.02.2015
comment
Това ще бъде функцията. x е x-координатата на точка B по отношение на точка A, която би била B.x-A.x, а y е y-координатата на точка B по отношение на A, която е B.y-A.y. - person Benjamin Murphy; 07.02.2015