![]() |
|
![]() ![]() ![]() |
|
compplace |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.6.2012 Репутация: нет Всего: -1 |
Доброго времени суток.
Есть точка А (x, y) и есть точка Б(x, y). Как переместить объект из точки А в точку Б? Для этого вроде как используются формулы с косинусами? |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: 4 Всего: 8 |
Пример ответа.
Возьмём объект в руки в точке A и перетащим в точку Б. То есть Вы условия задачи не до конца сформулировали. Напишите подлиннее. Это сообщение отредактировал(а) nworm - 17.6.2012, 19:21 |
|||
|
||||
compplace |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.6.2012 Репутация: нет Всего: -1 |
Ну например есть цикл, который должен переместить объект в заданную точку или нарисовать линию. Ну или как в игре Арканоид шарик запускают и он движется по заданной траектории от одной точки до другой, потом отталкивается и так же само. Так вот как эту траекторию сделать и перемещать объект? |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Если работаете с цифрами с плавающей точкой, то сравнение делаем с допуском. А ещё лучше сделать выход из цикла по t>Б.t и точно вычислить новые координаты. Это сообщение отредактировал(а) Pavia - 17.6.2012, 19:51 |
|||
|
||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: нет Всего: 16 |
Если вы хотите плавное перемещение объекта, то да. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
kaktebe |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 23.1.2012 Репутация: нет Всего: нет |
Да, так оно будет работать, но если объекты лежат на одной вертикальной/горизонтальной/диагональной прямой. А если они лежат на разных плоскостях? И под углом не 90/45/180 и т.д. к друг другу, а под скажем 12/50/77? Так они не встретятся никогда по идее... В инете нормальной инфы не нашёл по этой теме. Встречаются примеры типа такого: Vx = cos(angl*M_PI/180) * speed; Vy = sin(angl*M_PI/180) * speed; Но непонятно как вычислять angl... Это сообщение отредактировал(а) kaktebe - 18.6.2012, 00:00 |
||||
|
|||||
Pavia |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Если они лежат в разных плоскостях, то добавляется z. По поводу углов. Данная формула подойдет для любых углов.
Эти формулы применяются когда известна угол и скорость. Угол можно вычислить через арктангенс. Но смысла в этом нету когда vx и vy можно напрямую без косинусов и синусов получить. vx:=(Б.х-А.Х)/t Это сообщение отредактировал(а) Pavia - 18.6.2012, 06:11 |
||||
|
|||||
iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: нет Всего: 16 |
Всегда в одной. даже если есть координата z. Если compplace не вычислит vx и vy, а примет за единицу, то нет. Если хотите что-бы объект двигался не равномерно (разгонялся со "старта" и замедлялся к "финишу"), то имеет смысл использовать тригонометрическую зависимость координаты. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
compplace |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.6.2012 Репутация: нет Всего: -1 |
А как angl вычислить имея координаты двух 2D точек? |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 4 Всего: 101 |
для двух точек вопрос не имеет смысла. надо как минимум три. на трех точках можно построить два вектора, и найти угол используя скалярное произведение Добавлено через 5 минут и 12 секунд вообще говоря, если движение по прямой - то линейная интерполяция p=a*(1-t)+b*t, где а и b суть точки, t - параметр [0,1]. если движение равномерное, можно t считать временем а вот откуда косинусы взялись я таки не понял)). про повороты вроде ничего не говорилось |
|||
|
||||
htoit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2011 Репутация: нет Всего: нет |
Посмотрите алгоритм Брезенхема, который позволяет строить линии и окружности в дискретных пространствах.
Алгоритм чрезвычайно прост, реализуется целочисленной арифметикой и не имеет артефактов... применяется и в графике, и в управлении. |
|||
|
||||
compplace |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.6.2012 Репутация: нет Всего: -1 |
Спасибо, я уже сделал по таким вот формулам: x += speed*cos(angle*(3.141592/180)); y += speed*sin(angle*(3.141592/180)); А angle сначала выставляется где-то например 30 градусов и потом отражается при ударе о стенки. Правда немного криво работает... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |