Sida 1 av 1

Jag har fastnat hjälp!

InläggPostat: 29 september 2015, 13:21
av booooooooom
Programmet skall börja med
att rensa skärmen och fråga användaren efter utskottsvinkeln (eng. elevation i grader och utgångshastigheten i meter per sekund.
När användaren anger utgångshastighet, ska programmet öka den med 1%.
Sedan, ska programmet rita den kastbana som ingångsvärdena ger upphov till
på skärmen. Hur man beräknar denna beskrivs nedan.
När projektilen har nått marken igen så skrivs kastets längd och den (simulerade) tid
som förflutit ut. Därefter skall programmet fråga användaren om han/hon vill fortsätta eller om programmet skall avslutas.
Om användaren väljer att fortsätta så skall skärmen rensas och programmet fråga efter en ny utskottsvinkel och utgångshastighet.
Programmet skall fortsätta fram till dess att användaren väljer att avsluta.
Kastbanan skall ritas ut en gång per tidssteg med bokstaven ’O’och man bör utgå från att startpositionen är i det nedre vänstra hörnet.
En lämplig skala är 3 meter per bokstav i både höjd(Y)-led och bredd(X)-led.

Beräkning av kastbana
Programmet skall beräkna kastbanan
med
numerisk simulering
genom att tidssteg för tidssteg
beräkna var projektilen befinner sig
.
Konstanter som behövs pi= 3.1415927 Tyngdaccelerationen:g= 9.81 (m/s2) Tidsstegens längd:dt = 0.05 (s)
Från början har projektilen en: Utgångshastighet i meter per sekund:V0 Utskottsvinkel i radianer:U0
Position i X-och Y-led i m: Px0= 0 Py0 = 0
Hastighet i X-och Y-led i meter per sekund:Vx0= V0* cos(2*pi+U0) Vy0= V0 * sin(2*pi+U0)
För varje tidssteg behöver nuvarande position och hastighet uppdateras.(Detta är ett exempel på numerisk integreringav enklaste slag):
Vinkel i radianer får man genom att gångra vinkeln med(pi/180)

Ny position i X-och Y-led: Pxi+1 = Pxi+ Vxi *dt Pyi+1 = Pyi+ Vyi*dt

Ny hastighet i X-och Y-led:Vxi+1 = VxiVyi+1 = Vyi-g*dt

Hur ska man lösa det här(nybörjare)? Hur ska datan rita vinkeln? Hur ska jag ens börja tänka?
tacksam för svar

Re: Jag har fastnat hjälp!

InläggPostat: 29 september 2015, 17:49
av bjonte
Jag tror att du får börja med att rita något på skärmen. Om du nöjer dig med teckengrafik (40x25) så kan du kan tömma skärmen med

Kod: Markera allt
PRINTCHR$(147)


Sedan kan du fylla ett tecken på skärmen med

Kod: Markera allt
POKE1024+y*40+x,160


där X och Y är koordinater räknat från övre vänstra hörnet.

Re: Jag har fastnat hjälp!

InläggPostat: 29 september 2015, 17:55
av bjonte
För att rita en linje så behöver du en algoritm för detta. En vanlig sådan är "Bresenham's line algorithm".

Re: Jag har fastnat hjälp!

InläggPostat: 30 september 2015, 11:33
av booooooooom
Jag började så är. Jag har ingen aning hur jag ska få den att printa kurvan, jag får bara ut en liten fläck.
https://mega.nz/#!6FAFyBpS!cYI43D2TTUVn ... Ritwijixz4

Re: Jag har fastnat hjälp!

InläggPostat: 30 september 2015, 16:37
av TBC
En loop kanske hjälper.

Re: Jag har fastnat hjälp!

InläggPostat: 4 oktober 2015, 22:09
av e5frog
Det går väl bra att ladda upp filer här, man behöver inte använda någon konstig fildelarsajt som skickar ner .exe-fil för installation... om man inte prickar rätt länk på första klicket.

Du skriver PRINT V på rad 6, ska väl vara INPUT? Input lägger automatiskt till ett frågetecken (om man inte pokear bort det), det går att skriva INPUT "FRÅGA";variabel också om man vill.
Håller med föregående skribent att det krävs en loop för att plotta fler punkter, ska du ha från skärmkant till skärmkant så är väl 40 steg lämpligt?

Du kan använda tecknet för pi om du vill istället för 3.14, man behöver inte ha några mellanrum i koden, för att lättare kunna göra ändringar i koden så kan man lämna lite luft mellan programraderna. 10, 20, 30... etc istället för 1,2,3...


Hur är det tänkt att funka då?
Om man först beräknar maximal höjd och längd så får man dividera ner värdena så att de går in på skärmens storlek?

Borde man inte utgå från nedre hörnet?

Vill du plotta snyggare så kan du ge dig på att använda högupplöst skärm för själva plottningen.

Re: Jag har fastnat hjälp!

InläggPostat: 4 oktober 2015, 23:24
av e5frog
Jag lekte lite med det här, rudimentärt.
Plotten ser inget vidare ut man borde kanske köra i hires-läge istället, men det blir ju lite mer komplicerat.

Kod: Markera allt
0 printchr$(147)
1 poke53280,7:poke53281,13
2 g=9.81:dt=0.05:pl=46
3 u0=45:input"utgangsvinkel";u0
5 v0=33:input"utgangshastighet m/s";v0
6 px=0:py=0
7 u=u0*(pi/180):v=v0*1.01
10 vx=v*cos(2*pi+u):vy=v*sin(2*pi+u)
20 rem *** loop ***
21 if(px>120)or(py>75)then23
22 poke1024+int(px/3)+40*(24-int(py/3)),pl
23 px=px+vx*dt:py=py+vy*dt
25 vy=vy-g*dt:t=t+dt
30 ifpy>=0then20
40 print"tid:";t
60 print:print"igen? (j/n)"
70 geta$:ifa$=""then70
80 ifa$="j"thenrun


Frågor så långt?
Jag låter programmet hoppa över plottningen om den går utanför skärmen men den beräknar summan av alla tidsenheter tills vi når marken igen (y-positionen passerar 0).
PL=42 dvs en stjärna/gångertecken ser lite bättre ut kanske. Före input lade jag default-värden som genererar en parabel över nästan hela skärmens bredd. Vill man bara testa kan man trycka return två gånger.
Det finns väl inget smidigt sätt att krympa tidsinställningen till två decimaler, det blir lite avrundningsfel tydligen?