Форум программистов, компьютерный форум CyberForum.ru

Стрельба в координаты мыши - C++

Восстановить пароль Регистрация
 
Draftpad
 Аватар для Draftpad
26 / 27 / 1
Регистрация: 12.10.2011
Сообщений: 83
02.11.2011, 21:34     Стрельба в координаты мыши #1
Как оказалось, отсутствие математических основ в голове, это очень большая проблема, ибо застрял на простой задаче.

Собственно, производится выстрел из корабля, снаряд должен лететь по направлению к мышке.
Известны координаты начала полёта снаряда и координаты мышки, есть вектор, далее мысли заканчиваются... Гугл на эту тему, ничего путнего не предложил.

Прикладываю картинку, чтобы было понятно, чего я хочу.
Буду раз примеру вместе с кодом, либо простому примеру с расчётами с приведёнными на картинке значениями.

Стрельба в координаты мыши
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spark_sfb
4 / 4 / 0
Регистрация: 02.11.2011
Сообщений: 56
02.11.2011, 21:38     Стрельба в координаты мыши #2
Я тут недавно, поэтому может что и не понимаю, но в чем суть задачи то?
Анимацию сделать? Координаты попадания снаряда?
zek921
9 / 9 / 2
Регистрация: 30.04.2011
Сообщений: 130
Записей в блоге: 1
02.11.2011, 21:39     Стрельба в координаты мыши #3
по какой траектории ?
I2um1
Злой няш
 Аватар для I2um1
1334 / 1032 / 114
Регистрация: 05.04.2010
Сообщений: 1,811
02.11.2011, 21:42     Стрельба в координаты мыши #4
Ну~, допустим должны быть две переменные-скорости по X и Y: speedX, speedY.
Пусть координаты корабля - это (X, Y), тогда координаты мыши - это (X2, Y2).
Рассчитываем шаг по X и Y:
stepX = (X2 - X) / speedX;
stepY = (Y2 - Y) / speedY;
Предположим координаты снаряда - это Xr, Yr.
Тогда эмулировать движение так:
C++
1
2
3
4
for (Xr = X, Yr = Y; Xr <= X2 || Yr <= Y2; Xr += stepX, Yr += stepY)
{
   // Отображаем безобразие на экране
}
P.S. Это если прямолинейное движение без ускорения.
zek921
02.11.2011, 21:44
  #5

Не по теме:

оффтоп

Bers
Заблокирован
02.11.2011, 21:47     Стрельба в координаты мыши #6
Известны стартовые координаты снаряда. Известны конечные координаты снаряда.
Известно, что снаряд летит по прямой.

Нужно: определить текущие координаты с наряда в текущий момент времени.
Требуется дополнительно: определить единичный отрезок времени, и скорость полёта снаряда.

Тогда можно будит определять координаты снаряда через энный промежуток времени, с момента выстрела.
Draftpad
 Аватар для Draftpad
26 / 27 / 1
Регистрация: 12.10.2011
Сообщений: 83
02.11.2011, 21:59  [ТС]     Стрельба в координаты мыши #7
Всем спасибо, таки додумался до такого способа с элементарными расчётами(перебор идёт в цикле):
C++
1
2
3
    dir=-atan2(shots[i].coord.y-stMouseStates.iY,stMouseStates.iX-shots[i].coord.x);
    dx = cos(dir) * 1; shots[i].coord.x+=dx;
    dy = sin(dir) * 1; shots[i].coord.y+=dy;
dir - направление
stMouseStates - координаты мышки
shots[i].coord - координаты выстрелов

Правда при расчёте 300+ выстрелов в секунду заметно снижается фпс)) что не удивительно.

ЗЫ: Прошу прощения, что толком не сформулировал вопрос, времени 2 ночи, котелок варит уже с трудом =\
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
02.11.2011, 22:51     Стрельба в координаты мыши #8
считать синусы и косинусы в таких вещах не очень хорошо. можно придумать более упрощенные варианты. к примеру, вдохновиться алгоритмом Брезенхэма.

самый очевидный вариант - ввести некоторую оценочную ф-цию для каждой следующей точки. к примеру отношение (y2-y1)/(x2-x1). чем ближе оно к идеальному, замеренному для исходной точки, тем эта точка лучше. вроде есть способ и без деления обойтись.
Draftpad
 Аватар для Draftpad
26 / 27 / 1
Регистрация: 12.10.2011
Сообщений: 83
02.11.2011, 23:27  [ТС]     Стрельба в координаты мыши #9
Цитата Сообщение от Paporotnik Посмотреть сообщение
считать синусы и косинусы в таких вещах не очень хорошо.
Почему не хорошо?

Завтра буду пытаться найти более элегантный выход из этой ситуации.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
02.11.2011, 23:37     Стрельба в координаты мыши #10
тем, что это "тяжелые" функции и использовать их в частых и многочисленных расчетах, а особенно если результат должен быть real-time, нежелательно из соображений быстродействия. если заменишь их чем-то, то наверняка твои "300 выстрелов в секунду" будут гораздо адекватнее)
Bers
Заблокирован
02.11.2011, 23:43     Стрельба в координаты мыши #11
Цитата Сообщение от Draftpad Посмотреть сообщение
Почему не хорошо?
Потому что медленно. Геймдеф такое дело. Нужно стремится минимизировать количество операций. По возможности избавляясь от всех тяжелых операций, умножения, деления, и тп.

Например, тебе один раз достаточно найти угол (сняряд же летит по прямой, и с течением времени угол уже не меняется). Запомнить этот угол в переменной, и больше не использовать тяжелую функцию косинуса/синуса/тангенса.

Если стрелков очень много, и они постоянно стреляют (то есть стартовый угол все равно приходится высчитывать очень часто), то можно заранее сделать таблицу косинусов/синусов на все 360 градусов. И брать данные из таблицы, а не высчитывать каждый раз.

и тд, и тп.

Конечно, преждевременная оптимизация - зло. И заниматься этим нужно только тогда, когда уже ощущаются заметные падения фпс.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2011, 11:46     Стрельба в координаты мыши
Еще ссылки по теме:

C++ Перемещение курсора мыши на заданные координаты и клик
C++ Создать следующую программу: при наведении указателя мыши на кнопку ее координаты изменяются произвольным образом в пределах формы (кнопка убегает
Координаты курсора мыши C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Draftpad
 Аватар для Draftpad
26 / 27 / 1
Регистрация: 12.10.2011
Сообщений: 83
03.11.2011, 11:46  [ТС]     Стрельба в координаты мыши #12
Весь день я мучал поисковики на тему выстрелов по координатам в двухмерном пространстве, таки везде метод с синусами, косинусами и арктангенсом.

В примере от Blood-Angel без дополнительных вычислений, не будет известна скорость, с которой должен двигаться снаряд, в итоге скорость полёта напрямую зависит от расстояния мышки до начала полёта снаряда. Скорость вычислять приходится опять через арктангенс.

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

Либо эта тема имеет, какое-то другое, но скрытое от общего взора решение. Или же используется метод, приведённый в первом моём примере.

Кстати, подкорректировал функцию, теперь даже при расчёте 2000+ снарядов, нагрузка минимальна, буду надеяться, что к финальной версии, вместе с расчётами AI и прочим, падений производительности не будет.
Yandex
Объявления
03.11.2011, 11:46     Стрельба в координаты мыши
Ответ Создать тему
Опции темы

Текущее время: 07:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru