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

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

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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.