Fisica golf: tiro inclinato


9

"E ora qualcosa di completamente diverso."

Un uccello arrabbiato viene colpito ad un angolo β rispetto all'orizzontale ad una velocità u. Il terreno è ripido, inclinato di un angolo α. Trova la distanza orizzontale q percorsa dall'uccello prima di colpire il suolo.

Tiro

Esegui una funzione f (α, β, u) che restituisca la lunghezza q : la distanza orizzontale percorsa dall'uccello prima di colpire il suolo.

Vincoli e note:

  • -90 <α <90.
  • 0 <β <180.
  • α è sempre più piccolo di β.
  • 0 <= u <10 ^ 9.
  • Supponi l'accelerazione dovuta alla gravità g = 10.
  • Puoi usare i radianti invece dei gradi per α, β.
  • Le dimensioni di u sono irrilevanti purché siano coerenti con ge q.
  • Nessuna resistenza all'aria o qualcosa di troppo elegante.

Il codice più corto vince.

Vedi l'articolo di Wikipedia sul moto del proiettile per alcune equazioni.

Campioni:

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

Come ho visto un po 'di confusione sulla formula, eccolo che altri la utilizzino:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
Dr. belisarius,

Risposte:


3

Giava

Funziona solo per i radianti

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

Versione golfizzata (grazie a Peter)

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

Matematica utilizzata:

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

C'è qualcosa che non va in questo ... Non riesco a capire correttamente, qualcuno può aiutare?
Aman ZeeK Verma,

Questa formula non è corretta. Si prega di vedere il commento al post di
gnibbler

Quindi, non abbiamo alcuna soluzione perfetta :)
Aman ZeeK Verma,

1
aggiornata la formula ... spara qualche test ora per favore
Aman ZeeK Verma,

Puoi salvare alcuni caratteri: Math.abs non è necessario, -x + y è più corto di yx, * 0.2 è più corto di / 5 e hai parentesi non necessarie. OTOH ti manca il tipo restituito del metodo.
Peter Taylor,

2

Haskell ( 37 35)

Basato sulla soluzione di Aman:

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

Penso che questo problema non sia il vero code-golf, in quanto sta implementando una formula più che fare un po 'di algoritmo.


Forse hai ragione, poiché la formula è già troppo corta.
Eelvex,

1
Qualcosa di simile /5o /5.funzionerebbe?
Nabb,

Questa formula non è corretta. Si prega di vedere il commento al post di gnibbler.
Eelvex,

2

Python3 - 65 caratteri

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

Non è del tutto corretto. 1) f dovrebbe essere sempre positivo e 2) per α> 0 restituisce un valore maggiore di per a = 0, il che non è possibile.
Eelvex,

Ah bene, ho copiato la formula di FUZxxl: /
gnibbler il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.