Vinnaren i pepparkakshustävlingen!
2012-05-06, 14:00
  #1
Medlem
Tjenare! Jag sitter och skriver ett lag i Cloudball (som jag startade en tråd om här på flashback)

Här finns en liten intro till reglerna jag behöver hjälp med: http://cloudball.wikia.com/wiki/Game_Engine

Det jag behöver lösa är typ det här problemet:

Givet en boll som börjar i positionen B_0, och med hastigheten V_B, och givet en spelare som börjar i S_0 med hastighet V_S, mot vilken position ska spelaren springa för att så fort som möjligt möta upp bollen?

Jag har klurat en del på det här men lyckas inte

Edit: Kom på att jag kanske skulle länka getting started också om någon är intresserad
__________________
Senast redigerad av ClaesK 2012-05-06 kl. 14:02.
Citera
2012-05-06, 16:25
  #2
Medlem
adequates avatar
FMT -> Naturvetenskapliga uppgifter

/Mod
Citera
2012-05-06, 17:10
  #3
Medlem
D4GGes avatar
läste inte länkarna men är det i ett 3 "space" eller 2d?
Citera
2012-05-06, 18:06
  #4
Medlem
Det är 2d, så det blir lite enklare.

Jag har kommit fram till att följande är en ganska bra approximation av problemet.

Bollens hastighet efter n tidssteg ges av:

V_B(n)=V_B(0)*C^n.

Alltså ges bollens position av:

P_B(n) = summa(V_B(i),{i,0,n}) = V_B(0)*(C^n-1)/(C-1)

Spelarna accelerar typ snabbt, so vi kan anta att de alltid rör sig med maxhastighet.

Men sen har jag inte kommit längre
Citera
2012-05-06, 18:22
  #5
Medlem
Tänk på att V_s, spelarnas hastighet, är okänd, utan det bara är farten |V_s| som är känd. Jag kommer låta V_s, som alltså är en vektor, beteckna den okända hastigheten och anta att F betecknar spelarens maxfart.

Intuitivt är det ganska uppenbart att i) spelaren ska springa så fort som möjligt, och ii) spelaren ska springa i en rät linje, så vi antar det.

Vi har då följande ekvationssystem att lösa:

(1) B_0 + tV_B = S_0 + tV_S (spelaren och bollen ska vara vid samma position vid en okänd tidpunkt t)
(2) |V_S| = F (spelaren ska hålla varten F).

Om vi låter B_0 = (B_0x, B_0y), osv. så får vi ekvationerna
(1x) B_0x + tV_Bx = S_0x + tV_Sx
(1y) B_0y + tV_By = S_0y + tV_Sy
(2) (V_Sx)^2 + (V_Sy)^2 = F^2.

Det här är alltså ett ekvationssystem, med tre okända (t, V_Sx, V_Sy), och det är bara att lösa. Eftersom (2) är en andragradsekvation så kommer du ibland få två lösningar, ibland inga. (Sen om B_0 = S_0 och F = |V_B| så får du dessutom oändligt många lösningar, men det är ett mindre problem.) Om du har två lösningar så väljer du helt enkelt den snabbare.
Citera
2012-05-07, 00:32
  #6
Medlem
Citat:
Ursprungligen postat av dbshw
Tänk på att V_s, spelarnas hastighet, är okänd, utan det bara är farten |V_s| som är känd. Jag kommer låta V_s, som alltså är en vektor, beteckna den okända hastigheten och anta att F betecknar spelarens maxfart.

Intuitivt är det ganska uppenbart att i) spelaren ska springa så fort som möjligt, och ii) spelaren ska springa i en rät linje, så vi antar det.

Vi har då följande ekvationssystem att lösa:

(1) B_0 + tV_B = S_0 + tV_S (spelaren och bollen ska vara vid samma position vid en okänd tidpunkt t)
(2) |V_S| = F (spelaren ska hålla varten F).

Om vi låter B_0 = (B_0x, B_0y), osv. så får vi ekvationerna
(1x) B_0x + tV_Bx = S_0x + tV_Sx
(1y) B_0y + tV_By = S_0y + tV_Sy
(2) (V_Sx)^2 + (V_Sy)^2 = F^2.

Det här är alltså ett ekvationssystem, med tre okända (t, V_Sx, V_Sy), och det är bara att lösa. Eftersom (2) är en andragradsekvation så kommer du ibland få två lösningar, ibland inga. (Sen om B_0 = S_0 och F = |V_B| så får du dessutom oändligt många lösningar, men det är ett mindre problem.) Om du har två lösningar så väljer du helt enkelt den snabbare.

Ok, tack för hjälp Men tvärr är det inte helt fullständigt! Bollen saktar ju ner mot 0, så det borde ju alltid finnas minst en lösning, eller har jag fel?
Citera
2012-05-08, 20:03
  #7
Medlem
Citat:
Ursprungligen postat av ClaesK
Ok, tack för hjälp Men tvärr är det inte helt fullständigt! Bollen saktar ju ner mot 0, så det borde ju alltid finnas minst en lösning, eller har jag fel?

Aha. Bollen saktar ner. Då blir det lite knepigare. Om jag läser formlerna korrekta så saktar bollen dessutom ner på ett exponentiellt sätt. Man kan fortfarande skriva ner ekvationssystem ungefär som jag gjorde, men lösningen misstänker jag behöver ske numeriskt.
Citera
2012-05-19, 20:53
  #8
Medlem
Citat:
Ursprungligen postat av dbshw
Aha. Bollen saktar ner. Då blir det lite knepigare. Om jag läser formlerna korrekta så saktar bollen dessutom ner på ett exponentiellt sätt. Man kan fortfarande skriva ner ekvationssystem ungefär som jag gjorde, men lösningen misstänker jag behöver ske numeriskt.

Tack för hjälp, men jag kan inte se hur man löser det numeriskt :/ Är det någon som kan hjälpa till?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback