Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 24, 2013 14:17:34

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Повысить точность

Не знаю, почему заблочили мою тему об имитации полёта пули - http://python.su/forum/topic/22375/
Да и что-то, не очень помогаете новичку (
Но мне удалось самому разобраться, надо было заюзать atan2 вместо atan
Правда, есть погрешности из-за округлений. Тобишь, нельзя попасть в некоторые места, только если игрок сменит позицию. Ну и также, не очень гладкое отображения полёта пули. Как можно повысить точность? Или это невозможно впринципе? Какие есть алгоритмы, примеры?



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#2 Сен. 24, 2013 14:45:14

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Повысить точность

Не очень понятно. Ты не можешь провести прямую через две точки чтоли?

Офлайн

#3 Сен. 24, 2013 14:49:06

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Повысить точность

Не так, если ты пускаешь из точки А пулю по направлению к точке Б, на самом деле её полет отклоняется чутка и пролетает мимо. Выходит, надо делать постоянные корректировки?



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#4 Сен. 24, 2013 15:03:46

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Повысить точность

Так у вас вид сверху или вид сбоку в игре?
Если у вас вектор движения пули не прямая, то в уравнении ошибка.
Нарисуйте пару картинок, чтобы прояснить ситуацию.



Офлайн

#5 Сен. 24, 2013 15:25:38

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Повысить точность

Я там уже писал, что игра похоже на crimsonland. И похоже, проблема решилась, постоянной корректировкой - поправкой на курс )



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#6 Сен. 24, 2013 15:29:58

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Повысить точность

Lexander
Не так, если ты пускаешь из точки А пулю по направлению к точке Б, на самом деле её полет отклоняется чутка и пролетает мимо. Выходит, надо делать постоянные корректировки?
Блин, какие корректировки. Вычисли уравнение прямой, и оно не будет отклоняться…

Отредактировано sergeek (Сен. 24, 2013 15:31:28)

Офлайн

#7 Сен. 24, 2013 15:35:17

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Повысить точность

sergeek
Блин, какие корректировки.
Похоже он считает от текущих координат пули да ещё и приведённых к целым.

Офлайн

#8 Сен. 24, 2013 15:43:59

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Повысить точность

Не лучше выходит, во-первых, надо делать проверку на деление на ноль, во-вторых, разложить скорость надо по осям всё равно, ну, хотя бы на х, а y = kx + b
По-моему, ничуть не легче… даже сложнее



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#9 Сен. 24, 2013 16:01:09

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Повысить точность

Master_Sergius
во-первых, надо делать проверку на деление на ноль
как-будто так много делов

Master_Sergius
во-вторых, разложить скорость надо по осям всё равно,
зачем по осям? По длине отрезка же проще будет

Master_Sergius
По-моему, ничуть не легче… даже сложнее
Да не легче/сложнее а единственно верный способ по-моему. То, что ты там пытался делать я вообще понять не могу.

Офлайн

#10 Сен. 24, 2013 16:35:36

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Повысить точность

А по-моему, прекрасно получилось, вот таким образом, правда, пришлось if добавить, чтобы пуля пролетала дальше, чем цель

def move(self):
        self.off()
        x, y = self.get_coords()
        if abs((self._tx - x) * (self._ty - y)) < BULLETSPEED * BULLETSPEED:
            self._hit_target = True
        if not self._hit_target:
            angle = math.atan2(self._ty - y, self._tx - x)
            self._dx = int(round(self._speed * math.cos(angle)))
            self._dy = int(round(self._speed * math.sin(angle)))
        self._set_coords(x + self._dx, y + self._dy)
        self.on()

Ну, теперь всё работает. В цель вот с некоторой точностью попадает, на глаз не видно ничего плохого. И пролетает дальше за екран, после чего, объект “пуля” уничтожается



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version