Проблемы с триггером Python

Я использую Pythonista 2 на моем IPhone, и я пытаюсь создать сенсорный джойстик. Это простая концепция, я касаюсь где-нибудь на моем экране, джойстик и граница привязываются к этой позиции. Затем, когда я двигаю пальцем, граница остается неподвижной, а джойстик внутри перемещается, пока я не доберусь до края границы, затем она следует по окружности круга между центром границы и моим пальцем. Вот код:

def touch_moved(self, touch):
    global r
    r = 90
    l = (touch.location-c[0],touch.location-c[1])
    a = math.degrees(math.tan(l[1]/l[0]))
    if (touch.location[0] - c[0])**2 + (touch.location[1] - c[1])**2 < r**2:
        self.joystick.position = touch.location
    else:
        self.joystick.position = ((math.cos(a)*r)+c[0],(math.sin(a)*r)+c[1])`

Но джойстик разбрызгивается по окружности, поэтому любая помощь приветствуется.

1 ответ

Решение
  1. Вы используете a в качестве параметра для sin а также cos, но это произошло от звонка math.degrees(); Тригонометрические функции всегда работают в радианах, а не в градусах.

  2. a выводится из результата вызова tan, который должен быть предупреждающим знаком: tan использует угол в качестве входа, обычно не в качестве выхода. Вы, вероятно, хотите здесь обратную функцию, atan, На самом деле, что вы действительно хотите, math.atan2(), который принимает горизонтальные и вертикальные значения в качестве отдельных параметров. Когда ваш код написан, вы получите ошибку деления на ноль, если позиция касания находится прямо над или под центральной точкой.

  3. Ваш расчет l кажется неправильным - вы не должны использовать индексы [0] а также [1] с touch.locationкак будто вы делаете две строки позже?

Другие вопросы по тегам