如何在Python中使用补间,而又不损失准确性?

问题描述 投票:2回答:1

我一直在努力使用补间来使鼠标在Python中的移动更流畅,我目前正在尝试使一些重复性任务自动化。

我尝试使用补间功能消除了一些不应用平滑处理而出现的粗糙度,但是,在我的所有dydx值都除以number我剩下了余数。不幸的是,这可以通过在两个值上都获得greatest common factor来解决(因为dxdy都需要用相同的number分开),不幸的是,这导致GCD太小。

由于鼠标无法在屏幕上移动像素的其余部分,所以最终会导致准确性明显下降。

问题:如何在不影响准确性的情况下对鼠标移动进行补间?

import pytweening
import win32api
from time import sleep

dy = [50, 46, 42, 38, 33, 29, 24, 20, 15, 10, 10]
dx = [-35, 6, -55, -43, 0, 17, 29, 38, 42, 42, 38]

while True:

    count = 0

    values = [(pytweening.getPointOnLine(0, 0, x, y, 0.20)) for x, y in zip(dx, dy)]

    while win32api.GetAsyncKeyState(0x02) and win32api.GetAsyncKeyState(0x01):

        if count < len(dx):

            for _ in range(5):
                win32api.mouse_event(1, int(values[count][0]), int(values[count][1]), 0, 0)
                sleep(0.134 / 5)

            count += 1
python smoothing easing
1个回答
0
投票

问题:补间,而不会失去准确性?

参考

  • PyTweening - getLinePoint()

    getLinePoint()

    x, y = getLinePoint(startPoint x, startPoint y, endPoint x, endPoint y, intervall)函数在提供的直线上找到一个点。


  1. 将您的列表getLinePoint()dx放到dy的列表中

    tuple(x, y)

    输出

    dx = [-35, 6, -55, -43, 0, 17, 29, 38, 42, 42, 38]
    dy = [50, 46, 42, 38, 33, 29, 24, 20, 15, 10, 10]
    
    points = list(zip(dx, dy))
    print(points)
    
  2. 在双[(-35, 50), (6, 46), (-55, 42), (-43, 38), (0, 33), (17, 29), (29, 24), (38, 20), (42, 15), (42, 10), (38, 10)] 循环中处理points的此列表。

    for

    输出:始终达到端点

    import pytweening
    
    for startPoint in points:
        for endPoint in points:
            x, y = pytweening.getPointOnLine(startPoint[0], startPoint[1],
                                             endPoint[0], endPoint[1], 
                                             0.20)
            x, y = int(x), int(y)
            print('{}, '.format((x, y)), end='')
    
            # win32api.mouse_event(1, x, y, 0, 0)
            # sleep(0.134)
    

使用Python测试:3.6-pytweening:1.0.3

© www.soinside.com 2019 - 2024. All rights reserved.