Physikgolf: Schrägschießen

9

"Und jetzt etwas ganz anderes."

Ein wütender Vogel wird in einem Winkel β zur Horizontalen mit einer Geschwindigkeit u geschossen. Der Boden ist steil und in einem Winkel α geneigt. Finden Sie die horizontale Entfernung q , die der Vogel zurückgelegt hat, bevor er den Boden berührt hat.

Schießen

Machen Sie eine Funktion f (α, β, u), die die Länge q zurückgibt : die horizontale Distanz, die der Vogel zurückgelegt hat, bevor er den Boden berührt hat.

Einschränkungen und Hinweise:

  • -90 <α <90.
  • 0 <β <180.
  • α ist immer kleiner als β.
  • 0 <= u <10 ^ 9.
  • Nehmen Sie eine Erdbeschleunigung g = 10 an.
  • Sie können für α, β Bogenmaß anstelle von Grad verwenden.
  • Die Dimensionen von u sind irrelevant, solange sie mit g und q übereinstimmen.
  • Kein Luftwiderstand oder etwas zu ausgefallenes.

Der kürzeste Code gewinnt.

Im Wikipedia-Artikel über Projektilbewegungen finden Sie einige Gleichungen.

Proben:

f(0, 45, 10) = 10
f(0, 90, 100) = 0
f(26.565, 45, 10) = 5
f(26.565, 135, 10) = 15
Eelvex
quelle
Da ich einige Verwirrung über die Formel gesehen habe, ist es für andere, sie zu verwenden:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
Dr. belisarius

Antworten:

3

Java

Funktioniert nur im Bogenmaß

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

Golfversion (Danke an Peter)

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

Verwendete Mathematik:

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
quelle
Daran stimmt etwas nicht ... Ich kann es einfach nicht richtig herausfinden, kann jemand helfen?
Aman ZeeK Verma
Diese Formel ist nicht korrekt. Bitte beachten Sie den Kommentar bei Gnibbler's Post
Eelvex
Bis jetzt haben wir keine perfekte Lösung :)
Aman ZeeK Verma
1
hat die Formel aktualisiert ... feuere jetzt bitte einige Testfälle ab
Aman ZeeK Verma
Sie können einige Zeichen speichern - Math.abs ist nicht erforderlich, -x + y ist kürzer als yx, * 0.2 ist kürzer als / 5 und Sie haben unnötige Klammern. OTOH fehlt Ihnen der Rückgabetyp der Methode.
Peter Taylor
2

Haskell ( 37-35 )

Basierend auf Amans Lösung:

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

Ich denke, dieses Problem ist kein echtes Code-Golf, da es eher eine Formel implementiert als einen Algorithmus.

FUZxxl
quelle
Vielleicht hast du recht, da die Formel schon zu kurz ist.
Eelvex
1
Würde etwas mögen /5oder /5.funktionieren?
Nabb
Diese Formel ist nicht korrekt. Bitte beachten Sie den Kommentar in Gnibblers Beitrag.
Eelvex
2

Python3 - 65 Zeichen

from math import*
f=lambda α,β,u:(tan(α)+tan(β))*u*u*.2*cos(β)**2
Gnibbler
quelle
Das ist nicht ganz richtig. 1) f sollte immer positiv sein und 2) für α> 0 wird ein größerer Wert zurückgegeben als für a = 0, was nicht möglich ist.
Eelvex
Na ja, ich habe die Formel von FUZxxl kopiert: /
Gnibbler