Найти - Пользователи
Полная версия: Повысить точность
Начало » Python для новичков » Повысить точность
1
Master_Sergius
Не знаю, почему заблочили мою тему об имитации полёта пули - http://python.su/forum/topic/22375/
Да и что-то, не очень помогаете новичку (
Но мне удалось самому разобраться, надо было заюзать atan2 вместо atan
Правда, есть погрешности из-за округлений. Тобишь, нельзя попасть в некоторые места, только если игрок сменит позицию. Ну и также, не очень гладкое отображения полёта пули. Как можно повысить точность? Или это невозможно впринципе? Какие есть алгоритмы, примеры?
sergeek
Не очень понятно. Ты не можешь провести прямую через две точки чтоли?
Master_Sergius
Не так, если ты пускаешь из точки А пулю по направлению к точке Б, на самом деле её полет отклоняется чутка и пролетает мимо. Выходит, надо делать постоянные корректировки?
Lexander
Так у вас вид сверху или вид сбоку в игре?
Если у вас вектор движения пули не прямая, то в уравнении ошибка.
Нарисуйте пару картинок, чтобы прояснить ситуацию.
Master_Sergius
Я там уже писал, что игра похоже на crimsonland. И похоже, проблема решилась, постоянной корректировкой - поправкой на курс )
sergeek
Lexander
Не так, если ты пускаешь из точки А пулю по направлению к точке Б, на самом деле её полет отклоняется чутка и пролетает мимо. Выходит, надо делать постоянные корректировки?
Блин, какие корректировки. Вычисли уравнение прямой, и оно не будет отклоняться…
Shaman
sergeek
Блин, какие корректировки.
Похоже он считает от текущих координат пули да ещё и приведённых к целым.
Master_Sergius
Не лучше выходит, во-первых, надо делать проверку на деление на ноль, во-вторых, разложить скорость надо по осям всё равно, ну, хотя бы на х, а y = kx + b
По-моему, ничуть не легче… даже сложнее
sergeek
Master_Sergius
во-первых, надо делать проверку на деление на ноль
как-будто так много делов

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

Master_Sergius
По-моему, ничуть не легче… даже сложнее
Да не легче/сложнее а единственно верный способ по-моему. То, что ты там пытался делать я вообще понять не могу.
Master_Sergius
А по-моему, прекрасно получилось, вот таким образом, правда, пришлось 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()

Ну, теперь всё работает. В цель вот с некоторой точностью попадает, на глаз не видно ничего плохого. И пролетает дальше за екран, после чего, объект “пуля” уничтожается
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB