gpt4 book ai didi

python - pygame 在两点之间创建弧

转载 作者:行者123 更新时间:2023-12-02 09:41:33 25 4
gpt4 key购买 nike

我正在尝试在已知梯度的两条直线之间创建一条平滑曲线,我找到了一个方程来找到这两个点,但是当我尝试找到每个点的角度时,圆弧没有对齐。我已经算过,它(应该)是正确的。

def angle(A,B):
o = abs(B[1]-A[1])
a = abs(B[0] - A[0])
angle = math.atan(o/a)
return angle

a1 = angle((250, 175),(75, 300))
a2 = angle((250, 175),(400, 315))
pygame.draw.arc(gameDisplay, WHITE, (0 ,0 ,500,350), (math.pi) + a2,(2*math.pi) - a1)
pygame.draw.line(gameDisplay, BLUE, [400,0], [400, 500], 1)
pygame.draw.line(gameDisplay, BLUE, [0,315], [1000, 315], 1)
pygame.draw.line(gameDisplay, RED, [75,0], [75, 500], 1)
pygame.draw.line(gameDisplay, RED, [0,300], [1000, 300], 1)

这是查找起始角和终止角的基本代码,(250,175) 是椭圆的中心,(75, 300) 和 (400, 315) 是两个点。这些线是圆弧应该开始和停止的地方。

最佳答案

你没有画出完美的圆弧,实际上你画的是椭圆弧。您必须考虑传递给 pygame.draw.arc() 的矩形区域。 ((0, 0, 500, 350)),计算圆弧的起始角度和结束角度时。
正如评论中提到的,您必须使用 math.atan2 而不是 math.atan 来获取范围 [-pi, pi]。在pygame中,y轴指向下方,因此方向向量的y分量必须反转

def angle(A, B, aspectRatio):
x = B[0] - A[0]
y = B[1] - A[1]
angle = math.atan2(-y, x / aspectRatio)
return angle

a1 = angle((250, 175), (75, 300), 500/350)
a2 = angle((250, 175),(400, 315), 500/350)

pygame.draw.arc(gameDisplay, WHITE, (0, 0, 500, 350), a1, a2)

关于python - pygame 在两点之间创建弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58954526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com