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.