簡體   English   中英

在兩點之間創建圓弧 pygame

[英]Creating an arc between two points 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) 是兩個點。 這些線是弧應該開始和停止的地方。

你畫的不是完美的圓弧,實際上你畫的是橢圓弧。 在計算弧的開始和結束角度時,您必須考慮傳遞給pygame.draw.arc() ( (0, 0, 500, 350) ) 的矩形區域。
正如評論中提到的,您必須使用math.atan2而不是math.atan來獲得 [ -pipi ] 范圍內的角度。 在 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM