![]() |
Геометрический вопрос
Вложений: 1
Друзья, обращаюсь к вас с такой вот интересной задачей (см. прикрепленную картинку). Есть цель, есть пушка. Цель бегает за курсором мыши, пушка постоянно следит за целью в автоматическом режиме. Мне с легкостью удалось реализовать слежение пушки за целью по рис. 1. Но проблема в том, что у пушки оружие смещено относительно центра, и стреляет прямолинейно по отрезку CF (рис. 1). Соответственно пуля всегда проходит мимо цели. Пытаюсь вычислить угол w (рис. 2), на который нужно доворачивать пушку, но что-то все мои алгоритмы не подходят. В ходе "исследования" понял, что чем дальше цель от пушки, тем ближе угол w к углу a, а чем ближе цель к пушке, тем более похож угол w на угол a/2. Можно было бы на этом и остановится, но на средних дальностях идет достаточно серьезная погрешность.
Может найдется кто-то, кто подскажет, как все это посчитать правильно? Заранее всем спасибо, буду благодарен любой наводке на правильный алгоритм. |
По идее, вы можете переводить точку D, в глобальные координаты и уже их использовать при расчёте поворота пушки, вместо координат самой пушки.
|
Вложений: 1
Я так понимаю, задача сводится к нахождению двух углов (около вершины С), которые я пометил одной и двумя линиями. Все треугольники прямоугольные, часть данных известна (кстати, а какие размеры/углы известны?). Вообще, насколько я помню, в решении таких задач правильнле решение прямо вытекает из правильного чертежа. Т.е., чертить до тех пор, пока решение не станет очевидным. :)
|
Еще немного уточнений: ось вращения пушки - точка А. Точка вылета пули - С. Известные отрезки: АВ, АЕ, АD, т.е. по сути любые отрезки с рис. 1 известны.
|
Тут похожая тема, только там персонаж поворачивается за курсором, ну а у вас цель, разницы никакой.
Единственное что вам придётся учитывать это расстояние между A и C (которая в том примере не учитывается, и если подвести близко курсор, видно что дуло не направлено прямо на него). |
Цитата:
|
а если сделать гланым обьектом оружие, а саму пушку добавить в обьект оружия, тогда слежение будет осущетвлять не пушка, а оружие
тогда и вычислять ничего не нужно будет хотя придется замарочиться с поворотом относительно другого центра .... сделай танк ^_^ |
Цитата:
|
Вложений: 1
Может я чего-то упустил, но...
Гипотенузу и катет зеленого треугольника мы знаем, значит можем найти угол. Собственно, чего это я, можно ограничиться непосредственно треугольником AED, нет? |
Простите, а почему не подошел мой вариант (2 пост)? По идее ведь просчёты минимальны будут.
|
Цитата:
|
Потому что это центр самого ствола пушки, именно которая должена указывать на цель. Если я правильно понял рисунок.
|
Мне кажется, автор сам всех запутал, обозначив задачу как труднорешаемую.
Треугольник AED - прямоугольный, стороны AE и AD известны. Что еще нужно? |
Цитата:
В вашем случае нахождение угла w с рис. 2 сводится к нахождению угла а с рис. 1. А как я и говорил выше - угол a не работает, что и так ясно из рисунка. Добавлено через 2 минуты Точнее угол а работает хорошо, только на больших расстояниях между целью и пушкой. Как только цель приближается - угол начинает хорошо работать на a/2. |
Цитата:
На первом рисунке угол w ищется в другом треугольнике. Если точно - BCE, а я предлагаю брать треугольник EAD. Вы зря убрали точку D со второго рисунка, из за этого пропал очевидный факт, что треугольник EAD прямоугольный и с двумя известными сторонами. |
Вложений: 1
|
+1
все конструкция вращается вокруг точки A, тогда и в расчетах нужно брать плечо AD,а не AC. |
Код AS3:
|
Тут же все просто, переводим координаты точки С в глобальные и по ним считаем угол между Е и С.
|
>> По идее, вы можете переводить точку D, в глобальные координаты и уже их использовать при расчёте поворота пушки
>> Тут же все просто, переводим координаты точки С в глобальные и по ним считаем угол между Е и С. ну да, по точке D или C в глобальных координатах посчитать нужный угол не сложно, только для этого мувик уже должен быть повернут на этот угол:) |
Цитата:
Код AS3:
|
>>совсем не обязательно мувик должен быть уже повёрнут ) Всё ведь работает.
работает, но не точно для MOUSE_MOVE эта неточность мизерна но если посадить тоже самое на CLICK, например, то сразу станет понятно о чем речь: 'правильный' угол достигается только за несколько кликов\итераций |
Цитата:
|
Ребята, спасибо за помощь!
|
| Часовой пояс GMT +4, время: 02:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.