物理高尔夫:倾斜射击


9

“而现在,完全不同。”

一个愤怒的小鸟以一个角度β开枪水平的速度ü。地面陡峭,倾斜角度为α。在鸟撞到地面之前找到它行进的水平距离q

射击

制作一个函数f(α,β,u),该函数返回长度q:鸟在撞到地面之前所经过的水平距离。

约束和注意事项:

  • -90 <α<90。
  • 0 <β<180。
  • α总是小于β。
  • 0 <= u <10 ^ 9。
  • 假设由于重力g = 10而产生的加速度。
  • 对于α,β,可以使用弧度而不是度。
  • u的尺寸无关紧要,只要它们与g和q一致即可。
  • 没有空气阻力或任何花哨的东西。

最短的代码胜出。

有关某些方程式,请参见维基百科有关弹丸运动的文章。

样品:

f(0, 45, 10) = 10
f(0, 90, 100) = 0
f(26.565, 45, 10) = 5
f(26.565, 135, 10) = 15

当我对公式感到困惑时,其他人可以使用它:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
belisarius博士2011年

Answers:


3

爪哇

仅适用于弧度

double q(double a, double b, double u){
          return (Math.abs(((-Math.tan(a)+(Math.tan(b)))*(u*u)*(0.2*(Math.cos(b)*Math.cos(b))))));
      }

高尔夫版(感谢彼得)

double z=u*Math.cos(b);return(Math.tan(b)-Math.tan(a))*z*z/5;

使用的数学:

q=u Cos(B) t
q tan(A) = u sin (B) t - .5 * 10 * t^2

- tan (A)  + tan(B) = 5q/u^2 sec^2 (B)
q =  [ - tan(A) + tan (B) ] u^2
    ---------------------
    sec^2(B)*5

这有问题...我只是无法正确找出原因,可以帮上忙吗?
Aman ZeeK Verma 2011年

此公式不正确。请在短片发布者评论中查看评论
Eelvex 2011年

因此,我们还没有完美的解决方案:)
Aman ZeeK Verma 2011年

1
更新了公式...现在请解雇一些测试用例
Aman ZeeK Verma 2011年

您可以节省一些字符-Math.abs是不必要的,-x + y短于yx,* 0.2短于/ 5,并且有不必要的括号。OTOH,您缺少该方法的返回类型。
彼得·泰勒

2

哈斯克尔(37 35)

基于阿曼的解决方案:

q a b u=(tan a+tan b)*u*u*cos b^2/5

我认为,这个问题不是真正的代码问题,因为它比实际执行某种算法更多地实现了公式。


也许您是对的,因为公式已经太短了。
Eelvex

1
会不会喜欢/5/5.工作?
Nabb 2011年

此公式不正确。请参阅在gnibbler的帖子上的评论。
Eelvex 2011年

2

Python3-65个字符

from math import*
f=lambda α,β,u:(tan(α)+tan(β))*u*u*.2*cos(β)**2

那不是很正确。1)f应该始终为正,2)对于α> 0,它返回的值要大于a = 0的值,这是不可能的。
Eelvex 2011年

嗯,我复制了FUZxxl的公式:/
gnibbler
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.