如何在pygame中创建一个三点弧

时间:2016-06-06 17:21:25

标签: python geometry pygame

我需要通过三个点在pygame中画一个弧,但是pygame的弧函数似乎不支持这个。我已经研究了三个弧点,无论是在pygame中还是在pygame之外,但找不到任何我理解且有用的东西。

我理想情况下会喜欢完整的代码,但任何提示都会很有用

1 个答案:

答案 0 :(得分:2)

以下是一些提示,需要一些小数学才能完成。如果您需要更多帮助,请展示更多作品并提出要求。

假设您要绘制从点a=(ax, ay)到点b=(bx, by)到点c=(cx, cy)的圆弧。您想使用该功能

pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1)

所以你需要找到Rect,圆的边界矩形(它将是一个正方形),以及起始和终止角度。这是一个大纲。

  1. 将您的点坐标用于calculate the center of the relevant circle,为您指定u=(ux, uy)。如果该计算提出了除零或溢出错误,则这些点(几乎)在一条直线上,因此只需从点a到点c绘制一条线段,就可以完成。
  2. 计算点u到点a(或bc的距离,无所谓)。这将是所需圆的半径。
  3. 使用点u和半径计算边界矩形Rect的参数。矩形实际上是一个正方形,点u将是它的中心。
  4. 使用一点三角法计算从点u到点a的方向角:这个(差不多)将是start_angle。要小心,因为笛卡尔坐标增加y上升,而在pygame中增加y下降。同时计算从点u到点c的方向角:这个(几乎)将是stop_angle。然后计算从点u到点b的方向角。
  5. 检查这三个方向角。如有必要,交换起始和停止角度和/或将2 * pi添加到停止角度,以确保起始角度小于停止角度,并且弧线经过点b
  6. 您现在拥有Rectstart_anglestop_angle。这个大纲忽略了一些微妙的问题,比如四舍五入到整数,但我会留给你。