Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение координат вдоль прямой 
:(
    Опции темы
Fantaz1
Дата 22.6.2011, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите решить проблему!
Я пишу 2д игру, вид сбоку. И сейчас хочу реализовать такую фишку, что б при нажатии на кнопку мыши с персонажа (координаты X0, Y0) вылетала пуля и летела по направлению места нажатия кнопки мыши (X1,Y1)
То есть у нас есть прямая построенная на двух точках.
Вопрос: как и по каким формулам можно изменять нашу пулю(X0,Y0) что б она летела равномерно к (X1,Y1)? Как определить величины которые мы должны прибавлять к нашим X0,Y0 к примеру каждую миллисекунду??
PM MAIL   Вверх
azesmcar
Дата 22.6.2011, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Fantaz1 @  22.6.2011,  19:10 Найти цитируемый пост)
Вопрос: как и по каким формулам можно изменять нашу пулю(X0,Y0) что б она летела равномерно к (X1,Y1)? Как определить величины которые мы должны прибавлять к нашим X0,Y0 к примеру каждую миллисекунду?? 

уравнение прямой
PM   Вверх
Fantaz1
Дата 22.6.2011, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



и шо дальше? там нету ответа на мой вопрос!! Уравнения прямой я и так знаю, я не про это спрашивал!

Это сообщение отредактировал(а) Fantaz1 - 22.6.2011, 19:45
PM MAIL   Вверх
azesmcar
Дата 22.6.2011, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



а что ты спрашивал?

Цитата(Fantaz1 @  22.6.2011,  19:10 Найти цитируемый пост)
как и по каким формулам можно изменять нашу пулю(X0,Y0) что б она летела равномерно к (X1,Y1)? 

ответ: твоя формула - уравнение прямой!
PM   Вверх
Fantaz1
Дата 22.6.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это не ответ! И что дальше делать с этим уравнением прямой? подставлять все числа и проверять подходят ли они этому уравнению?
Вопрос вот: как изменять координаты пули?
PM MAIL   Вверх
azesmcar
Дата 22.6.2011, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Fantaz1

Ты хоть прочитал по ссылке прежде чем отвечать?
Цитата

Уравнение прямой, проходящей через две заданные несовпадающие точки
user posted image
или в общем виде
user posted image

подставляешь циклом значения для x в интервале между x0 и x1, считаешь y и получаешь координаты.
PM   Вверх
Fantaz1
Дата 22.6.2011, 20:29 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я не настолько туп, я ищу нормальный алгоритм решения чем этот, тупой перебор чисел я не считаю за решение.
Вот я и спрашивал есть ли какие то формулы или законы по которым изменяются координаты по прямой!
Вот на другом форуме мне и ответили то что я хотел:
Зависимость координат пули от времени (v - это заданная скорость)

user posted image

Это сообщение отредактировал(а) Fantaz1 - 22.6.2011, 20:29
PM MAIL   Вверх
Earnest
Дата 22.6.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Тебе ответили ровно то же самое... Это обобщенное уравнение прямой, абсолютно эквивалентное тому, что написал azesmcar. 
И  t - совсем не время, а параметр длины прямой. Впрочем, можно и как время трактовать, да хоть как ежиков, стоящих вдоль прямой.
Цитата(Fantaz1 @  22.6.2011,  21:29 Найти цитируемый пост)
Я не настолько туп, я ищу нормальный алгоритм решения чем этот, тупой перебор чисел я не считаю за решение.

Может и не туп, но с матчастью явные пробелы. Никакого тупого перебора тебе и не предлагали. Кто же виноват, что ты не понял. Хорошо, что на другом форуме тебе объяснили лучше. 
Кстати, ты действительно угол собираешься вычислять? Все эти арктангенсы применять?



--------------------
...
PM   Вверх
Fantaz1
Дата 23.6.2011, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



До ответа дошел сам. Оказывается он был до безобразия прост..) И не надо не каких формул и прямых. 
- Нахожу координаты вектора движения пули (X1-X0;Y1-Y0). 
- Делю его на его длину. Получаю единичный вектор. 
- А потом постоянно его прибавляю к координате пули.
И пуля движется в ту сторону которую надо)
PM MAIL   Вверх
baldina
Дата 23.6.2011, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Fantaz1 @  23.6.2011,  12:27 Найти цитируемый пост)
постоянно его прибавляю

плохой способ
PM MAIL   Вверх
Fantaz1
Дата 23.6.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(baldina @  23.6.2011,  12:37 Найти цитируемый пост)
плохой способ

В смысле? почему плохой?
PM MAIL   Вверх
baldina
Дата 23.6.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



потому что накапливается погрешность.
если надо пройти отрезок (a,b) с шагом dx (для простоты положим, что (b-a) кратно dx), есть два способа:
Код

for (double x = a; x < b; ) 
  x += dx;

и
Код

int n = int((b-a)/dx);
for (int i=0; i < n; ++i)
  double x = a + i*dx;

второй способ предпочтительнее, т.к. в нем не используется предыдущее значение, и погрешность невелика и постоянна
---
что касается Вашей задачи, имхо удобнее представить её в виде линейной интерполяции c параметром t, изменяемом от 0 до 1:
Код

template <typename T>
T lerp(T a, T b, double t) 
{
   return a*(1.0-t) + b*t;
}

формула a*(1.0-t) + b*t суть уравнение прямой в параметрическом виде, где a и b - точки концов отрезка, задающего прямую
т.е. фрагмент программы может быть примерно такой:
Код

int X0, Y0;
int X1, Y1;
int n = 10; // число шагов
double dt = 1.0/(n-1);
for (int i=0; i < n; ++i)
{
   double t = i*dt;
   int X = lerp(X0,X1,t);
   int Y = lerp(Y0,Y1,t);
}


Это сообщение отредактировал(а) baldina - 23.6.2011, 14:56
PM MAIL   Вверх
_Y_
Дата 23.6.2011, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Fantaz1 @  23.6.2011,  12:48 Найти цитируемый пост)
почему плохой? 

Eще и потому плохой, что на каждом шаге надо проверять, а не встречена ли цель. При этом в подавляющем большинстве случаев конец очередного отрезка будет заканчиваться ЗА целью и придется отсчтитывать назад.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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