Fizyka golfa: strzelanie z ukosa

9

"A teraz coś z zupełnie innej beczki."

Zły ptak jest nagrywany pod kątem p do poziomu, przy prędkości u. Ziemia jest stroma, nachylona pod kątem α. Znajdź poziomą odległość q, którą ptak przebył, zanim uderzył o ziemię.

Strzelanie

Stwórz funkcję f (α, β, u), która zwraca długość q : odległość w poziomie, jaką przebył ptak przed uderzeniem o ziemię.

Ograniczenia i uwagi:

  • -90 <α <90.
  • 0 <β <180.
  • α jest zawsze mniejsze niż β.
  • 0 <= u <10 ^ 9.
  • Przyjmij przyspieszenie ziemskie g = 10.
  • Możesz użyć radianów zamiast stopni dla α, β.
  • Wymiary u są nieistotne, o ile są zgodne z gi q.
  • Brak oporu powietrza lub coś zbyt wymyślnego.

Najkrótszy kod wygrywa.

Zobacz artykuł w Wikipedii na temat ruchu pocisków dla niektórych równań.

Próbki:

f(0, 45, 10) = 10
f(0, 90, 100) = 0
f(26.565, 45, 10) = 5
f(26.565, 135, 10) = 15
Eelvex
źródło
Widziałem pewne zamieszanie związane z tą formułą, dlatego inni mogą z niej skorzystać:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
Dr Belisarius

Odpowiedzi:

3

Jawa

Działa tylko w radianach

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))))));
      }

Wersja w golfa (Podziękowania dla Petera)

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

Zastosowane matematyki:

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
źródło
Coś jest z tym nie tak ... Po prostu nie mogę poprawnie zrozumieć, czy ktoś może pomóc?
Aman ZeeK Verma
Ta formuła jest nieprawidłowa. Zobacz komentarz w poście
gnibbler
Nie mamy jeszcze żadnego idealnego rozwiązania :)
Aman ZeeK Verma,
1
zaktualizowałem formułę ... odpal teraz kilka testów
Aman ZeeK Verma,
Możesz zapisać kilka znaków - Math.abs jest niepotrzebny, -x + y jest krótszy niż yx, * 0,2 jest krótszy jak / 5 i masz niepotrzebne nawiasy. OTOH, brakuje Ci typu zwrotu metody.
Peter Taylor
2

Haskell ( 37 35)

W oparciu o rozwiązanie Aman:

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

Myślę, że ten problem nie jest prawdziwym golfem, ponieważ bardziej implementuje formułę niż naprawdę robi jakiś algorytm.

FUZxxl
źródło
Może masz rację, ponieważ formuła jest już za krótka.
Eelvex
1
Czy coś /5lub /5.działałoby?
Nabb
Ta formuła jest nieprawidłowa. Zobacz komentarz w poście gnibbler.
Eelvex
2

Python3 - 65 znaków

from math import*
f=lambda α,β,u:(tan(α)+tan(β))*u*u*.2*cos(β)**2
gnibbler
źródło
To nie do końca prawda. 1) f powinno zawsze być dodatnie, a 2) dla α> 0 zwraca większą wartość niż dla a = 0, co nie jest możliwe.
Eelvex
No cóż, skopiowałem formułę FUZxxl: /
gnibbler