为什么维基百科的弹丸轨迹公式给出奇怪的结果

本文关键字:轨迹 结果 百科 为什么 | 更新日期: 2023-09-27 18:09:40

所以我从维基百科得到了一个方程来找到抛射物可以用不同的给定变量旅行的距离,比如角度和速度(高度和重力是可选的,高度默认为0)。

dist = ((velocity * velocity) / 9.807f) * (float)Math.Sin(angle * 2);

我也试过这个:

dist = ((velocity * velocity) * (float)Math.Sin(angle * 2)) / 9.807f;

这两种方法都没有给出令人满意的结果。第一个是91....而另一个给了我一个否定。

谢谢。

为什么维基百科的弹丸轨迹公式给出奇怪的结果

这些似乎是相等的(对于变量的任何值应该给出相同的答案),并且如果您使用正确的单位,它们都应该给出正确的答案。你需要把角度转换成度。正如@theB所指出的,速度应该以米每秒为单位,输出的距离应该以米为单位。

最好采用最简单的数字,例如速度= 1,g = 10,角度为45度(pi/4弧度)。检查你是否得到了正确的答案。它应该很简单,你可以用计算器自己算出结果。先把这个做好。然后使用其他值作为输入,每次更改一个。

正如@PeterSchneider在评论中所说,检查我们立即知道答案的值非常有用,例如90度和0度。这些例子可能看起来毫无意义,在现实生活中永远不需要。但是,它们作为测试用例具有以下优点:

  • 很容易指定行为应该是什么
  • 通过检查这些情况,您可能会发现影响其他值的错误。
  • 相反,您可能会在处理边缘情况时发现一个错误,否则您不会发现,例如除以零。

一些边缘情况可能相当棘手。如果重力为零会怎样?

你可能应该把你的代码放在一个函数中,它接受velocity, gangle作为参数并返回距离。这将允许您轻松地尝试多个不同的输入。

这种过程有一种形式化的形式,叫做单元测试。您编写小段测试代码,检查不同的情况,从最简单的开始。每次进行更改时,都要重新运行测试以确保一切正常。如果你感兴趣,你可以看看c#的单元测试框架NUnit。