Как перемещать мышь по ar c, заданному 3 точками и длиной? - PullRequest
0 голосов
/ 21 июня 2020

В настоящее время я работаю над разделом программы, которая перемещает мышь по ar c.

Мне даны три точки, которые определяют ar c: начальная точка p1, промежуточная точка на арке c p2 и конечная точка p3. Еще мне дали length ар c. Если length больше, чем фактическая длина ar c, обозначенного p1 и p3, то p3 не будет конечной точкой ar c, но мышь продолжит движение в круг, пока он не пройдет расстояние 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

Однако я столкнулся с некоторыми проблемами при попытке параметрического поиска новой точки на ar c.

  1. Моя мышь не начинается с p1, но, как я предполагаю, находится в точке, где линия от мыши к центру и горизонтальная линия покрывают 0 градусов, так как я не учел в параметрах начальный угол . Как определить начальный угол наклона мыши?
  2. Как определить, следует ли вращать по часовой стрелке или против часовой стрелки, т.е. x = center.x + r * cos(i * dAngle) или x = center.x - r * cos(i * dAngle)

Если есть более эффективный способ передвижения по ар c предложите пожалуйста.

1 Ответ

1 голос
/ 21 июня 2020

Вы можете рассчитать начальный угол как

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)

О направлении - возможно, вы сможете определить направление, когда вычисляется ar c center. Если нет, а угол развертки ar c меньше Pi (180 градусов), просто найдите знак выражения

sg = math.sign((p1.x-center.x) * (p3.y-center.y) - (p1.y-center.y) * (p3.x-center.x))

и используйте его с dAngle

x = center.x + r * cos(a1 + i * sg * dAngle)
similar for y

PS обратите внимание, что минус в x = center.x - r * cos(i * dAngle) - неправильный способ изменить направление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...