PyGame - 基于航向画线

PyGame - Draw Line Based on Heading

提问人:Ygor Montenegro 提问时间:11/13/2023 最后编辑:Rabbid76Ygor Montenegro 更新时间:11/13/2023 访问量:45

问:

我用来在两个坐标之间画一条线(以像素为单位),这个函数所需的格式是。pygame.draw.line(begin_x,begin_y),(end_x, end_y)

此线的起始坐标可以是 (0,0),并且该线的整个长度必须为 100px。但是,如果起点和终点之间的标题是 060º,那么这条线的结束坐标将是哪个?

这条线是飞机在屏幕上的结果向量。

例如。如果飞机航向为 090º,则结束坐标为 (0,100),如果为 0º,则为 (-100, 0),依此类推。

# Tried this but it's not working
ending_x = begin_x + math.cos(heading) * length
ending_y = begin_y + math.sin(heading) * length

enter image description here

Python 数学 三角函数

评论


答:

1赞 psysrc 11/13/2023 #1

我建议学习三角学的基础知识才能开始,例如 https://www.mathsisfun.com/algebra/trigonometry.html

在这里,我画了一个包含两个点的图表,以及 . 是中心/起点,是您尝试计算的坐标。这些点之间的距离被标记为 。我还绘制了表示点和 之间的标题的角度。ABABLaAB

Basic trigonometry diagram, labelling the various things that can be calculated

通过使用此图并应用基本的三角函数,您可以得出便签中的方程。点 和 之间的垂直差,可由下式计算。同样,点之间的水平差可以用 计算。ABhL * sin(a)wL * cos(a)

要小心,因为根据角度的不同,坐标很可能不会是整数值,因此您可能需要进行一些舍入或近似。a

0赞 Ygor Montenegro 11/13/2023 #2
# Now Works
ending_x = begin_x + math.cos(math.radians(heading)) * length
ending_y = begin_y + math.sin(math.radians(heading)) * length

忘了变换弧度。