amarao (amarao_san) wrote,
amarao
amarao_san

охота пуще неволи

Обычно от таких вещей у меня в продакте начинают болеть зубы.

    def set_cells_by_strike(self,value,pos,rel):
        '''operates on every cell under single mouse move'''
        if max(rel) < min(self.cell_size):
            self.set_cell_by_pos(value,pos) #trivial - one cell changed
            return
        print "non-trivial case:", pos, rel
        div_round_to_infinity = lambda a, b: (a+(-a%b))//b # http://stackoverflow.com/questions/7181757/how-to-implement-division-with-round-towards-infinity-in-python
        point_calc = lambda pos,rel, step, steps, size, index: pos[index] - rel[index] + div_round_to_infinity(rel[index]*step, steps)
        steps = div_round_to_infinity(max(rel), min(self.cell_size))
        for step in range(0, steps):
            print "step:", step
            x = point_calc(pos, rel, step, steps, self.cell_size, 0)
            y = point_calc(pos, rel, step, steps, self.cell_size, 1)
            print "doing:", x, y
            self.set_cell_by_pos(value, (x,y))



Насколько я понимаю, это отдалённая форма алгоритма для отрезка Брезенхерма.

В процессе отладки нарвался на забавное поведение клитора на thinkpad'ах: при быстром движении в pygame (по крайней мере в pygame) он даёт события движения мыши с разрывами, то есть сумма пройденного в rel для всех событий MOUSEMOTION меньше, чем итоговое изменение положения курсора.

Для обычной мыши и точпада такого не наблюдается.

UPD: На мыше так же можно сделать. Интересно, это так acceleration выглядит?
Tags: pygame, thinkpad
Subscribe

  • ну всё, пиздец леново

    Потребовалось довольно много лет, чтобы просрать наследие butterfly keyboard IBM'а.…

  • я не забыл про игрушку

    Пока что осознал важную вещь: для всяких pathfinding'ов нужно иметь граф. Граф чаще всего хранится в виде списка вершин с прилагающимся к каждой…

  • отрисовка многоспрайтовых изображений

    Задумался о проблеме (уверен, её решали и есть красивые решения): если у нас очень сложная композиция (допустим, свалка из пачки спрайтов, частично…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments