Показать сообщение отдельно
Старый 13.01.2014, 01:15
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 5  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от InSelecto Посмотреть сообщение
Красота, но все равно после 2го отскока глючит: см. мой пост выше с новым приложением - там именно эта ситуация и с вашим алгоритмом.
А зачем ваш метод возвращает DAngle? Вы его там потом ничему заново не присваиваете и в новую итерацию не передаете? У меня подозрения, что угол потом резко (за счет движения корабля) попадает в область "< 90 градусов" и выйти из нее уже не может (так и меняется на противоположный).

Мне кажется, нужно менять алгоритм. Пока угол тупой - target движется в предыдущем направлении. Если же угол острый (или прямой) - затупляем его вне зависимости от предыдущего движения. Для этого смотрим на знак

Код AS3:
if (product < 0) {
  const crossProduct : Number = (point.y - targ.y) * (ship.x - targ.x) - (point.x - targ.x) * (ship.y - targ.y);
  DAngle = (crossProduct <= 0 ? -1 : 1) * Math.abs(DAngle);
}
Может быть, там условие ">=0" вместо "<=0".

Цитата:
Сообщение от InSelecto Посмотреть сообщение
Как вы к этому выражению пришли? Или ссыль какую)
Не люблю считать в углах, если все можно посчитать в векторах. В углах очень много граничных случаев. Ваша задача проверки угла на тупизну эквивалентна проверке знака косинуса угла. А проверка знака косинуса угла эквивалентна проверке знака скалярного произведения векторов (скалярное произведение равно произведению длин на косинус угла между ними). Формула product - формула скалярного произведения векторов по их коордиантам в ортонормированном базисе. Формула crossProduct - "длина" векторного произведения векторов, ее знак определяет направление поворота между векторами (в каком случае положительно - не помню). Т.е. при изменении порядка веткоров "векторное произведение" поменяет знак. Пока точные углы не нужны, векторного произведения вполне достаточно для качественной оценки (поворот по/против часовой стрелки).

Вся необходимая теория - в учебниках по линейной алгебре (первый курс университетов).