在两个点之间创建弧形pygame

3
我试图在已知斜率的两条直线之间创建一个平滑曲线,我找到了一个方程来找到这两个点,但当我尝试找到每个点的角度时,弧线不对齐。我已经做了计算,但它(应该)是正确的。
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) 是两个点。线条表示弧应该开始和结束的位置。


2
math.atan 只有 pi 弧度(180 度)的范围。要获得完整的 360 度,您应该使用 math.atan2(delta_y, delta_x)arc 调用中的那些加减也让我感到可疑。 - interjay
你所绘制的是一个椭圆弧。 - Rabbid76
1个回答

2

你画的不是完美的圆弧,实际上你画的是一个椭圆弧。在计算弧线的起始角度和结束角度时,必须考虑传递给 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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接