Fizik golf: eğimli çekim


9

"Ve şimdi tamamen farklı bir şey."

Bir kızgın kuş bir hızda u yatay bir P açısı ateş edilir. Zemin dik, α açısında eğimlidir. Kuşun yere çarpmadan önce kat ettiği yatay mesafeyi q bulun .

Çekim

Q uzunluğunu döndüren f (α, β, u) işlevini yapın : kuşun yere çarpmadan önce kat ettiği yatay mesafe.

Kısıtlamalar ve notlar:

  • -90 <90.
  • 0 <β <180.
  • α daima β 'dan küçüktür.
  • 0 <= u <10 ^ 9.
  • Yerçekimi g = 10 nedeniyle ivmeyi varsayalım.
  • Α, for için derece yerine radyan kullanabilirsiniz.
  • U'nun boyutları g ve q ile tutarlı olduğu sürece önemsizdir.
  • Hava direnci veya çok süslü bir şey yok.

En kısa kod kazanır.

Bazı denklemler için mermi hareketi hakkındaki wikipedia makalesine bakın .

Örnekler:

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

Formül hakkında biraz karışıklık gördüğümde, burada başkalarının kullanması için:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
Dr. belisarius

Yanıtlar:


3

Java

Sadece radyan için çalışır

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

Golf Versiyonu (Peter sayesinde)

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

Kullanılan Matematik:

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

Bunda yanlış bir şey var ... Doğru anlayamıyorum, some1 yardımcı olabilir mi?
Aman ZeeK Verma

Bu formül doğru değil. Lütfen gnibbler'ın yazısına bakınız
Eelvex

Yani henüz mükemmel bir çözümümüz yok :)
Aman ZeeK Verma

1
formülü güncelledi ... şimdi bazı testcases ateş lütfen
Aman ZeeK Verma

Birkaç karakter kaydedebilirsiniz - Math.abs gereksizdir, -x + y yx kadar kısadır, * 0.2 / 5 kadar kısadır ve gereksiz köşeli paranteziniz vardır. OTOH yöntemin dönüş türünü kaçırıyorsunuz.
Peter Taylor

2

Haskell ( 37 35)

Aman'ın çözümüne dayanarak:

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

Bence, bu problem gerçek bir kod golf değil, çünkü bazı algoritmaları yapmaktan çok bir formül uyguluyor.


Belki de haklısınız, çünkü formül zaten çok kısa.
Eelvex

1
Bir şey ister misiniz /5veya /5.çalışır mı?
Nabb

Bu formül doğru değil. Lütfen gnibbler'ın gönderisindeki yoruma bakın.
Eelvex

2

Python3 - 65 karakter

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

Bu pek doğru değil. 1) f daima pozitif olmalı ve 2) α> 0 için a = 0 için olandan daha büyük bir değer döndürür, bu mümkün değildir.
Eelvex

Ah, FUZxxl'in formülünü kopyaladım: /
gnibbler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.