Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Перемещение объекта из точки А в точку Б |
Автор: compplace 17.6.2012, 17:57 |
Доброго времени суток. Есть точка А (x, y) и есть точка Б(x, y). Как переместить объект из точки А в точку Б? Для этого вроде как используются формулы с косинусами? |
Автор: nworm 17.6.2012, 19:20 |
Пример ответа. Возьмём объект в руки в точке A и перетащим в точку Б. То есть Вы условия задачи не до конца сформулировали. Напишите подлиннее. |
Автор: compplace 17.6.2012, 19:34 | ||
Ну например есть цикл, который должен переместить объект в заданную точку или нарисовать линию. Ну или как в игре Арканоид шарик запускают и он движется по заданной траектории от одной точки до другой, потом отталкивается и так же само. Так вот как эту траекторию сделать и перемещать объект? |
Автор: Pavia 17.6.2012, 19:44 | ||
Если работаете с цифрами с плавающей точкой, то сравнение делаем с допуском. А ещё лучше сделать выход из цикла по t>Б.t и точно вычислить новые координаты. |
Автор: iff 17.6.2012, 20:57 |
Если вы хотите плавное перемещение объекта, то да. |
Автор: kaktebe 17.6.2012, 23:59 | ||||
Да, так оно будет работать, но если объекты лежат на одной вертикальной/горизонтальной/диагональной прямой. А если они лежат на разных плоскостях? И под углом не 90/45/180 и т.д. к друг другу, а под скажем 12/50/77? Так они не встретятся никогда по идее... В инете нормальной инфы не нашёл по этой теме. Встречаются примеры типа такого: Vx = cos(angl*M_PI/180) * speed; Vy = sin(angl*M_PI/180) * speed; Но непонятно как вычислять angl... |
Автор: iff 18.6.2012, 13:10 |
Всегда в одной. даже если есть координата z. Если compplace не вычислит vx и vy, а примет за единицу, то нет. Если хотите что-бы объект двигался не равномерно (разгонялся со "старта" и замедлялся к "финишу"), то имеет смысл использовать тригонометрическую зависимость координаты. |
Автор: compplace 18.6.2012, 16:04 | ||
А как angl вычислить имея координаты двух 2D точек? |
Автор: baldina 18.6.2012, 16:24 |
для двух точек вопрос не имеет смысла. надо как минимум три. на трех точках можно построить два вектора, и найти угол используя http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B0%D0%BB%D1%8F%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5 Добавлено через 5 минут и 12 секунд вообще говоря, если движение по прямой - то линейная интерполяция p=a*(1-t)+b*t, где а и b суть точки, t - параметр [0,1]. если движение равномерное, можно t считать временем а вот откуда косинусы взялись я таки не понял)). про повороты вроде ничего не говорилось |
Автор: htoit 20.6.2012, 10:55 |
Посмотрите алгоритм Брезенхема, который позволяет строить линии и окружности в дискретных пространствах. Алгоритм чрезвычайно прост, реализуется целочисленной арифметикой и не имеет артефактов... применяется и в графике, и в управлении. |
Автор: compplace 20.6.2012, 12:18 | ||
Спасибо, я уже сделал по таким вот формулам: x += speed*cos(angle*(3.141592/180)); y += speed*sin(angle*(3.141592/180)); А angle сначала выставляется где-то например 30 градусов и потом отражается при ударе о стенки. Правда немного криво работает... |