Проблемы с триггером 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 ответ
Вы используете
a
в качестве параметра дляsin
а такжеcos
, но это произошло от звонкаmath.degrees()
; Тригонометрические функции всегда работают в радианах, а не в градусах.a
выводится из результата вызоваtan
, который должен быть предупреждающим знаком:tan
использует угол в качестве входа, обычно не в качестве выхода. Вы, вероятно, хотите здесь обратную функцию,atan
, На самом деле, что вы действительно хотите,math.atan2()
, который принимает горизонтальные и вертикальные значения в качестве отдельных параметров. Когда ваш код написан, вы получите ошибку деления на ноль, если позиция касания находится прямо над или под центральной точкой.Ваш расчет
l
кажется неправильным - вы не должны использовать индексы[0]
а также[1]
сtouch.location
как будто вы делаете две строки позже?