Python 触发器问题
Python trig problems
我在 IPhone 上使用 Pythonista 2,我正在尝试创建一个触摸操纵杆。这是一个简单的概念,我触摸屏幕上的某个地方,操纵杆和边界会吸附到那个位置。然后,当我移动手指时,边界保持静止,但内部的操纵杆移动,直到我到达边界的边缘,然后它沿着边界中心和我的手指之间的圆周移动。这是代码:
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])`
但是操纵杆在圆周上发出嘶嘶声,所以非常感谢您的帮助。
您正在使用 a
作为 sin
和 cos
的参数,但它来自对 math.degrees()
的调用;三角函数始终以弧度而不是度为单位进行运算。
a
是从调用tan
的结果派生出来的,这应该是一个警告标志:tan
使用角度作为输入,通常不作为输出。您可能需要此处的反函数 atan
。实际上,您真正想要的是 math.atan2()
,它将水平和垂直值作为单独的参数。在您编写代码时,如果触摸位置直接位于中心点上方或下方,您将得到除零错误。
您对 l
的计算似乎有误 - 您不应该使用索引 [0]
和 [1]
以及 touch.location
,就像您稍后做两行?
我在 IPhone 上使用 Pythonista 2,我正在尝试创建一个触摸操纵杆。这是一个简单的概念,我触摸屏幕上的某个地方,操纵杆和边界会吸附到那个位置。然后,当我移动手指时,边界保持静止,但内部的操纵杆移动,直到我到达边界的边缘,然后它沿着边界中心和我的手指之间的圆周移动。这是代码:
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])`
但是操纵杆在圆周上发出嘶嘶声,所以非常感谢您的帮助。
您正在使用
a
作为sin
和cos
的参数,但它来自对math.degrees()
的调用;三角函数始终以弧度而不是度为单位进行运算。a
是从调用tan
的结果派生出来的,这应该是一个警告标志:tan
使用角度作为输入,通常不作为输出。您可能需要此处的反函数atan
。实际上,您真正想要的是math.atan2()
,它将水平和垂直值作为单独的参数。在您编写代码时,如果触摸位置直接位于中心点上方或下方,您将得到除零错误。您对
l
的计算似乎有误 - 您不应该使用索引[0]
和[1]
以及touch.location
,就像您稍后做两行?