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])`

但是操纵杆在圆周上发出嘶嘶声,所以非常感谢您的帮助。

  1. 您正在使用 a 作为 sincos 的参数,但它来自对 math.degrees() 的调用;三角函数始终以弧度而不是度为单位进行运算。

  2. a是从调用tan的结果派生出来的,这应该是一个警告标志:tan使用角度作为输入,通常不作为输出。您可能需要此处的反函数 atan。实际上,您真正想要的是 math.atan2(),它将水平和垂直值作为单独的参数。在您编写代码时,如果触摸位置直接位于中心点上方或下方,您将得到除零错误。

  3. 您对 l 的计算似乎有误 - 您不应该使用索引 [0][1] 以及 touch.location,就像您稍后做两行?