Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перемещение объекта из точки А в точку Б 
:(
    Опции темы
compplace
Дата 17.6.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2012

Репутация: нет
Всего: -1



Доброго времени суток.
Есть точка А (x, y) и есть точка Б(x, y).
Как переместить объект из точки А в точку Б?
Для этого вроде как используются формулы с косинусами?
PM MAIL WWW   Вверх
nworm
Дата 17.6.2012, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



Пример ответа.
Возьмём объект в руки в точке A и перетащим в точку Б.

То есть Вы условия задачи не до конца сформулировали.
Напишите подлиннее.

Это сообщение отредактировал(а) nworm - 17.6.2012, 19:21
PM MAIL WWW   Вверх
compplace
Дата 17.6.2012, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2012

Репутация: нет
Всего: -1



Цитата(nworm @ 17.6.2012,  19:20)
Пример ответа.
Возьмём объект в руки в точке A и перетащим в точку Б.

То есть Вы условия задачи не до конца сформулировали.
Напишите подлиннее.

Ну например есть цикл, который должен переместить объект в заданную точку или нарисовать линию.
Ну или как в игре Арканоид шарик запускают и он движется по заданной траектории от одной точки до другой, потом отталкивается и так же само.
Так вот как эту траекторию сделать и перемещать объект?
PM MAIL WWW   Вверх
Pavia
Дата 17.6.2012, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Код

вычисляем скорости vx и vy;

x:=А.x;
y:=А.y;


цикл 
  измеряем, вычисляем dt - время прошедшее с предыдущего витка цикла 
  dx:=vx*dt;
  dy:=vx*dt;

  x:=x+dx;
  y:=y+dy;
выходим из цикла  если (x=Б.x) и (y=Б.y)


Если работаете с цифрами с плавающей точкой, то сравнение делаем с допуском.

А ещё лучше сделать выход из цикла по t>Б.t и  точно вычислить новые координаты.



Это сообщение отредактировал(а) Pavia - 17.6.2012, 19:51
PM MAIL   Вверх
iff
Дата 17.6.2012, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: нет
Всего: 16



Цитата(compplace @  17.6.2012,  17:57 Найти цитируемый пост)
Для этого вроде как используются формулы с косинусами? 

Если вы хотите плавное перемещение объекта, то да.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
kaktebe
Дата 17.6.2012, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 23.1.2012

Репутация: нет
Всего: нет



Цитата(Pavia @ 17.6.2012,  19:44)
Код

вычисляем скорости vx и vy;

x:=А.x;
y:=А.y;


цикл 
  измеряем, вычисляем dt - время прошедшее с предыдущего витка цикла 
  dx:=vx*dt;
  dy:=vx*dt;

  x:=x+dx;
  y:=y+dy;
выходим из цикла  если (x=Б.x) и (y=Б.y)


Если работаете с цифрами с плавающей точкой, то сравнение делаем с допуском.

А ещё лучше сделать выход из цикла по t>Б.t и  точно вычислить новые координаты.

Да, так оно будет работать, но если объекты лежат на одной вертикальной/горизонтальной/диагональной прямой. А если они лежат на разных плоскостях? И под углом не 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
PM MAIL   Вверх
Pavia
Дата 18.6.2012, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Цитата(kaktebe @  17.6.2012,  23:59 Найти цитируемый пост)
 А если они лежат на разных плоскостях? И под углом не 90/45/180 и т.д. к друг другу, а под скажем 12/50/77? Так они не встретятся никогда по идее...

Если они лежат в разных плоскостях, то добавляется z.  По поводу углов. Данная формула подойдет для любых углов. 


Цитата(kaktebe @  17.6.2012,  23:59 Найти цитируемый пост)
Встречаются примеры типа такого:Vx = cos(angl*M_PI/180) * speed;Vy = sin(angl*M_PI/180) * speed; Но непонятно как вычислять angl...

Эти формулы применяются когда известна угол и скорость. Угол можно вычислить через арктангенс. Но смысла в этом нету когда vx и vy можно напрямую без косинусов и синусов получить. vx:=(Б.х-А.Х)/t

Это сообщение отредактировал(а) Pavia - 18.6.2012, 06:11
PM MAIL   Вверх
iff
Дата 18.6.2012, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: нет
Всего: 16



Цитата(Pavia @  18.6.2012,  05:34 Найти цитируемый пост)
Если они лежат в разных плоскостях,

Всегда в одной. даже если есть координата z.

Цитата(Pavia @  18.6.2012,  05:34 Найти цитируемый пост)
Данная формула подойдет для любых углов

Если compplace не вычислит vx и vy, а примет за единицу, то нет.

Если хотите что-бы объект двигался не равномерно (разгонялся со "старта" и замедлялся к "финишу"), то имеет смысл использовать тригонометрическую зависимость координаты.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
compplace
Дата 18.6.2012, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2012

Репутация: нет
Всего: -1



Цитата(iff @ 18.6.2012,  13:10)
Цитата(Pavia @  18.6.2012,  05:34 Найти цитируемый пост)
Если они лежат в разных плоскостях,

Всегда в одной. даже если есть координата z.

Цитата(Pavia @  18.6.2012,  05:34 Найти цитируемый пост)
Данная формула подойдет для любых углов

Если compplace не вычислит vx и vy, а примет за единицу, то нет.

Если хотите что-бы объект двигался не равномерно (разгонялся со "старта" и замедлялся к "финишу"), то имеет смысл использовать тригонометрическую зависимость координаты.

А как angl вычислить имея координаты двух 2D точек?
PM MAIL WWW   Вверх
baldina
Дата 18.6.2012, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(compplace @  18.6.2012,  16:04 Найти цитируемый пост)
А как angl вычислить имея координаты двух 2D точек? 

для двух точек вопрос не имеет смысла. надо как минимум три. 
на трех точках можно построить два вектора, и найти угол используя скалярное произведение

Добавлено через 5 минут и 12 секунд
Цитата(compplace @  17.6.2012,  17:57 Найти цитируемый пост)
Как переместить объект из точки А в точку Б?

вообще говоря, если движение по прямой - то линейная интерполяция
p=a*(1-t)+b*t, где а и b суть точки, t - параметр [0,1]. если движение равномерное, можно t считать временем
а вот откуда косинусы взялись я таки не понял)). про повороты вроде ничего не говорилось
PM MAIL   Вверх
htoit
Дата 20.6.2012, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.8.2011

Репутация: нет
Всего: нет



Посмотрите алгоритм Брезенхема, который позволяет строить линии и окружности в дискретных пространствах.
Алгоритм чрезвычайно прост, реализуется целочисленной арифметикой и не имеет артефактов... применяется и в графике, и в управлении.
PM MAIL   Вверх
compplace
Дата 20.6.2012, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.6.2012

Репутация: нет
Всего: -1



Цитата(htoit @ 20.6.2012,  10:55)
Посмотрите алгоритм Брезенхема, который позволяет строить линии и окружности в дискретных пространствах.
Алгоритм чрезвычайно прост, реализуется целочисленной арифметикой и не имеет артефактов... применяется и в графике, и в управлении.

Спасибо, я уже сделал по таким вот формулам:
x += speed*cos(angle*(3.141592/180));
y += speed*sin(angle*(3.141592/180));
А angle сначала выставляется где-то например 30 градусов и потом отражается при ударе о стенки.
Правда немного криво работает...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0905 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.