Python触发器问题
我在IPhone上使用Pythonista2,我正在尝试创建一个触摸操纵杆。这是一个简单的概念,我触摸屏幕上的某个地方,操纵杆和边界捕捉到该位置。然后,当我移动手指时,边界保持静止,但操纵杆内部移动,直到我到达边界的边缘,然后它沿着边界中心和手指之间的圆周移动。代码如下: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
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],就像你在后面做两行一样吗