Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python触发器问题_Python_Trigonometry_Pythonista - Fatal编程技术网

Python触发器问题

Python触发器问题,python,trigonometry,pythonista,Python,Trigonometry,Pythonista,我在IPhone上使用Pythonista2,我正在尝试创建一个触摸操纵杆。这是一个简单的概念,我触摸屏幕上的某个地方,操纵杆和边界捕捉到该位置。然后,当我移动手指时,边界保持静止,但操纵杆内部移动,直到我到达边界的边缘,然后它沿着边界中心和手指之间的圆周移动。代码如下: def touch_moved(self, touch): global r r = 90 l = (touch.location-c[0],touch.location-c[1]) a = m

我在IPhone上使用Pythonista2,我正在尝试创建一个触摸操纵杆。这是一个简单的概念,我触摸屏幕上的某个地方,操纵杆和边界捕捉到该位置。然后,当我移动手指时,边界保持静止,但操纵杆内部移动,直到我到达边界的边缘,然后它沿着边界中心和手指之间的圆周移动。代码如下:

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的调用;trig功能始终以弧度而不是度数运行

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

你对l的计算似乎是错误的-你不应该在touch.location中使用索引[0]和[1],就像你在后面做两行一样吗