使用Pyautogui自上而下绘制圆

2024-06-02 06:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Pyautogui,用鼠标从上到下创建一个半圆。目前,我正在使用一个从右到左或从左到右的脚本。但是我无法使脚本自上而下地工作。这是当前的脚本

import pyautogui
import math

R = 40
(x,y) = pyautogui.size()
(X,Y) = pyautogui.position(580,311)


pyautogui.moveTo(X+R,Y)
pyautogui.mouseDown();
for i in range(180):  
    if i%6==0:
       pyautogui.moveTo(X+R*math.cos(math.radians(i)),Y+R*math.sin(math.radians(i)))
pyautogui.mouseUp()

所以现在它转到位置,加上半径,然后开始画圆。我希望它在顶部添加半径并开始向下绘制。我知道如何在顶部添加半径,但向下绘制很困难。所以如果有人能帮上忙那就太好了

谢谢, 格特雷克托莱尔斯


Tags: import脚本forsize半径绘制positionmath
1条回答
网友
1楼 · 发布于 2024-06-02 06:34:38

你好,这里是GetRektOrElse

首先,我想为我糟糕的代码样式道歉,我主要是一名数学家,对样式不是很熟悉

我采用了一种不同的方法来解决这个问题,使用笛卡尔坐标系中的圆方程:(x ** 2 - a) + (y ** 2 - b) = r ** 2其中点(ab)是圆的中心,r是圆的半径。通过重新排列该方程,您可以找到一个关于x的公式,即ysqrt((r ** 2) - ((y - b) ** 2)) + a。通过迭代y的整数值,该方程可用于在每个像素行上找到x的相关值,从中可以绘制圆

我相信这种方法比您使用的方法更直观,并且对于将来可能要进行的其他转换更通用

import pyautogui
import math

r = 36
centrex = 2778
centrey = 505

y = centrey - r
x = math.sqrt((r ** 2) - ((y - centrey) ** 2)) + centrex

oldx = x
oldy = y

for i in range(r):
    pyautogui.moveTo(x, y)
    x = math.sqrt((r ** 2) - ((y - centrey) ** 2)) + centrex
    pyautogui.dragTo(x, y)
    tempx = centrex - math.sqrt((r ** 2) - ((y - centrey) ** 2))
    tempoldx = centrex - math.sqrt((r ** 2) - ((oldy - centrey) ** 2))
    pyautogui.moveTo(tempoldx, oldy)
    pyautogui.dragTo(tempx, y)
    pyautogui.dragTo(x, y) # comment this line if you want to disable fill

    oldx = x
    oldy = y

    y = y + 1

我想再次道歉,我确信这段代码是多么恶心,但是它以我上面描述的方式执行了您想要的功能。如果您有任何问题,请随时提问,并感谢您提出如此有趣的问题

希望你身体健康

博巴塔利翁

相关问题 更多 >