Цитата:
Сообщение от maxkar
Не люблю считать в углах, если все можно посчитать в векторах. В углах очень много граничных случаев. Ваша задача проверки угла на тупизну эквивалентна проверке знака косинуса угла. А проверка знака косинуса угла эквивалентна проверке знака скалярного произведения векторов (скалярное произведение равно произведению длин на косинус угла между ними). Формула product - формула скалярного произведения векторов по их коордиантам в ортонормированном базисе. Формула crossProduct - "длина" векторного произведения векторов, ее знак определяет направление поворота между векторами (в каком случае положительно - не помню). Т.е. при изменении порядка веткоров "векторное произведение" поменяет знак. Пока точные углы не нужны, векторного произведения вполне достаточно для качественной оценки (поворот по/против часовой стрелки).
Вся необходимая теория - в учебниках по линейной алгебре (первый курс университетов).
|
Уже нашел) Читаю.
Добавлено через 11 минут
Цитата:
Сообщение от maxkar
А зачем ваш метод возвращает DAngle? Вы его там потом ничему заново не присваиваете и в новую итерацию не передаете? У меня подозрения, что угол потом резко (за счет движения корабля) попадает в область "< 90 градусов" и выйти из нее уже не может (так и меняется на противоположный).
|
Передаю:
Код AS3:
DeltaAngle=MovePointer (Player1, Target1, Pointer1, PointerRadius, DeltaAngle);