| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Изменение координат вдоль прямой |
| Автор: Fantaz1 22.6.2011, 19:10 |
| Помогите решить проблему! Я пишу 2д игру, вид сбоку. И сейчас хочу реализовать такую фишку, что б при нажатии на кнопку мыши с персонажа (координаты X0, Y0) вылетала пуля и летела по направлению места нажатия кнопки мыши (X1,Y1) То есть у нас есть прямая построенная на двух точках. Вопрос: как и по каким формулам можно изменять нашу пулю(X0,Y0) что б она летела равномерно к (X1,Y1)? Как определить величины которые мы должны прибавлять к нашим X0,Y0 к примеру каждую миллисекунду?? |
| Автор: Fantaz1 22.6.2011, 19:44 |
| и шо дальше? там нету ответа на мой вопрос!! Уравнения прямой я и так знаю, я не про это спрашивал! |
| Автор: azesmcar 22.6.2011, 20:04 | ||
а что ты спрашивал?
ответ: твоя формула - уравнение прямой! |
| Автор: Fantaz1 22.6.2011, 20:11 |
| Это не ответ! И что дальше делать с этим уравнением прямой? подставлять все числа и проверять подходят ли они этому уравнению? Вопрос вот: как изменять координаты пули? |
| Автор: azesmcar 22.6.2011, 20:15 | ||
| Fantaz1 Ты хоть прочитал по ссылке прежде чем отвечать?
подставляешь циклом значения для x в интервале между x0 и x1, считаешь y и получаешь координаты. |
| Автор: Fantaz1 22.6.2011, 20:29 |
| Я не настолько туп, я ищу нормальный алгоритм решения чем этот, тупой перебор чисел я не считаю за решение. Вот я и спрашивал есть ли какие то формулы или законы по которым изменяются координаты по прямой! Вот на другом форуме мне и ответили то что я хотел: Зависимость координат пули от времени (v - это заданная скорость) ![]() |
| Автор: Earnest 22.6.2011, 20:47 | ||
| Тебе ответили ровно то же самое... Это обобщенное уравнение прямой, абсолютно эквивалентное тому, что написал azesmcar. И t - совсем не время, а параметр длины прямой. Впрочем, можно и как время трактовать, да хоть как ежиков, стоящих вдоль прямой.
Может и не туп, но с матчастью явные пробелы. Никакого тупого перебора тебе и не предлагали. Кто же виноват, что ты не понял. Хорошо, что на другом форуме тебе объяснили лучше. Кстати, ты действительно угол собираешься вычислять? Все эти арктангенсы применять? |
| Автор: Fantaz1 23.6.2011, 12:27 |
| До ответа дошел сам. Оказывается он был до безобразия прост..) И не надо не каких формул и прямых. - Нахожу координаты вектора движения пули (X1-X0;Y1-Y0). - Делю его на его длину. Получаю единичный вектор. - А потом постоянно его прибавляю к координате пули. И пуля движется в ту сторону которую надо) |
| Автор: baldina 23.6.2011, 12:37 |
плохой способ |
| Автор: Fantaz1 23.6.2011, 12:48 |
В смысле? почему плохой? |
| Автор: baldina 23.6.2011, 14:47 | ||||||||
| потому что накапливается погрешность. если надо пройти отрезок (a,b) с шагом dx (для простоты положим, что (b-a) кратно dx), есть два способа:
и
второй способ предпочтительнее, т.к. в нем не используется предыдущее значение, и погрешность невелика и постоянна --- что касается Вашей задачи, имхо удобнее представить её в виде линейной интерполяции c параметром t, изменяемом от 0 до 1:
формула a*(1.0-t) + b*t суть уравнение прямой в параметрическом виде, где a и b - точки концов отрезка, задающего прямую т.е. фрагмент программы может быть примерно такой:
|
| Автор: _Y_ 23.6.2011, 21:57 |
Eще и потому плохой, что на каждом шаге надо проверять, а не встречена ли цель. При этом в подавляющем большинстве случаев конец очередного отрезка будет заканчиваться ЗА целью и придется отсчтитывать назад. |