首页 > 解决方案 > 在两点之间创建弧线pygame

问题描述

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

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) 是两个点。这些线是弧应该开始和停止的地方。

标签: pythonpython-3.xmathpygame

解决方案


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

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)


推荐阅读