Python 使用Pyautogui自上而下绘制圆

Python 使用Pyautogui自上而下绘制圆,python,geometry,mouse,pyautogui,Python,Geometry,Mouse,Pyautogui,我想使用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): i

我想使用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()
所以现在它转到位置,加上半径,然后开始画圆。我希望它在顶部添加半径并开始向下绘制。我知道如何在顶部添加半径,但向下绘制很困难。所以如果有人能帮上忙那就太好了

谢谢,
GetRektOrElse

你好,GetRektOrElse

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

我采用了一种不同的方法来解决这个问题,使用笛卡尔坐标系中的圆方程:
(x**2-a)+(y**2-b)=r**2
,其中点(a,b)是圆的中心,r是圆的半径。通过重新排列这个方程,你可以找到一个x的公式,用y表示:
sqrt((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
我想再次道歉,我确信这段代码是多么恶心,但是它以我上面描述的方式执行了您想要的功能。如果您有任何问题,请随时提问,并感谢您提出如此有趣的问题

希望你身体健康


巴巴塔利翁

啊,哇。我感到很遗憾,还没有人回答你。我也在想类似的事情。祝你好运