Python 如何沿3个点和一个长度给定的圆弧移动鼠标?

Python 如何沿3个点和一个长度给定的圆弧移动鼠标?,python,geometry,Python,Geometry,我目前正在编写一个程序的一部分,它可以在圆弧中移动鼠标 我得到了定义弧的三个点:起点p1,弧上的中间点p2,终点p3。我还得到了弧的长度。如果length大于p1和p3所对弧的实际长度,则p3将不是弧的终点,但鼠标将继续在圆中移动,直到移动距离length 我已经算出了圆心(x,y),半径r,以及扫掠角度 要移动鼠标,我希望将angle划分为更小的间隔,每个间隔都带有angledAngle,并在扫描dAngle后在当前位置和新位置之间移动鼠标。我想到的是下面的伪代码: for i in rang

我目前正在编写一个程序的一部分,它可以在圆弧中移动鼠标

我得到了定义弧的三个点:起点
p1
,弧上的中间点
p2
,终点
p3
。我还得到了弧的
长度
。如果
length
大于
p1
p3
所对弧的实际长度,则
p3
将不是弧的终点,但鼠标将继续在圆中移动,直到移动距离
length

我已经算出了圆心
(x,y)
,半径
r
,以及扫掠角度

要移动鼠标,我希望将
angle
划分为更小的间隔,每个间隔都带有angle
dAngle
,并在扫描
dAngle
后在当前位置和新位置之间移动鼠标。我想到的是下面的伪代码:

for i in range(intervals):
    x = center.x + r * cos(i * dAngle)
    y = center.y + r * sin(i * dAngle)
    Move mouse to (x, y)
    Sleep 1
但是,我在尝试参数化地查找圆弧上的新点时遇到了一些问题

  • 我的鼠标不是从
    p1
    开始的,而是在我假设的从鼠标到中心的线和水平线对0度角的点处,因为我没有将初始角度考虑到参数中。如何找到鼠标的初始角度
  • 如何确定是顺时针旋转还是逆时针旋转,即
    x=center.x+r*cos(I*dAngle)
    还是
    x=center.x-r*cos(I*dAngle)

  • 如果有一种更有效的圆弧运动方式,请提出建议。

    您可以根据需要计算起始角度

    a1 = math.atan2(p1.y-center.y, p1.x-center.x)
    
    然后用在

    x = center.x + r * cos(a1 + i * dAngle)
    y = center.y + r * sin(a1 + i * dAngle)
    
    关于方向-也许可以在计算弧中心时确定方向。若否,且弧扫描角度小于Pi(180度),只需找到表达式的符号即可

    sg = math.sign((p1.x-center.x) * (p3.y-center.y) - (p1.y-center.y) * (p3.x-center.x))
    
    并将其与悬挂一起使用

    x = center.x + r * cos(a1 + i * sg * dAngle)
    similar for y
    
    注意,
    x=center.x-r*cos(i*dAngle)
    中的负号是改变方向的错误方式