Kogelbaan modelleren

jeroen stelde deze vraag op 06 december 2010 om 11:33.

Voor mijn profielwerkstuk ga ik berekenen of een waarschuwingschot afgevuurd in een hoek van 75 graden dodelijk kan zijn. Ik gebruik hiervoor het programma coach 5 modelleren.  Als ik het programma de baan laat tekenen krijg ik een negatieve rechte lijn. Terwijl ik een paraboolvormige lijn verwacht.

nog even ter verduidelijking de formules;

Fz=-9,81*m
vx=v*cos(alfa)
vy=v*sin(alfa)
k=0,5*Cw*A*rholucht
Fw=k*v*v
alfa=arctan(vy/vx)
Fwx=-Fw*cos(alfa)
Fwy=-Fw*sin(alfa)
Fresx=Fwx
Fresy=Fz+Fwy
ax=Fresx/m
ay=Fresy/m
v=sqrt(vx*vx+vy*vy)
vx=vx+ax*dt
vy=vy+ay*dt
x=x+vx*dt
y=y+vy*dt
t=t+dt

 en de gegevens:

m=0,00103
v=368
alfa=75
A=6,36*10^-5
Cw=0,295
rholucht=1,293
x=0
y=2
t=0
dt=0,1

Ik denk dat er een foutje inzit, dus ik hoop dat julllie me kunnen helpen

 

Reacties

Theo op 06 december 2010 om 14:42

Zijn er niet wat dubbele definities of dingen die niet hetzelfde zijn maar alleen beginwaarden zijn?

Dit zijn denk ik beginwaarden van v op t=0:

vx=v*cos(alfa)
vy=v*sin(alfa)

Dit zijn snelheden op willekeurige t met bovenstaande als beginwaarde.

vx=vx+ax*dt
vy=vy+ay*dt

Programmatisch maak je dit onterecht dezelfde variabelen. Probeer hierboven eens ipv vx en vy v0x en v0y te nemen:

v0x=v0*cos(alfa)
v0y=v0*sin(alfa)

vx=v0x+ax*dt
vy=v0y+ay*dt

Kijk dus je formules nog eens goed na op variabelen die feitelijk niet hetzelfde betekenen!

 

 

Theo op 06 december 2010 om 19:00

UItgaande van formules

v(t) = v(0) + a.t 

s(t) = 1/2 at2 + v(0)t + s(0)   

voor de x- en y- componenten elk is er natuurlijk ook geen reden om dt te gebruiken en incrementeel stapjes te berekenen.

Doe je dit toch, dan kan dat alleen goed gaan door speciaal voor t=0 eerst beginwaarden aan v(0) en s(0) toe te kennen  (if t=0 then...else...)

Jaap op 06 december 2010 om 21:20

Dag Jeroen,
Door je tweede en derde modelregel (vx=... en vy=...) wordt de correcte stapsgewijze berekening vx=vx+ax*dt en vy=vy+ay*dt in elke volgende rekenlus ongedaan gemaakt en vervangen door vx=v*cos(alfa) en idem vy uit de vorige rekenlus. Zodoende hebben vx en vy na een gehele rekenlus weer dezelfde waarde. Dat verklaart je rechte grafiek. Zoals de heer De Klerk opmerkt, moet je deze tweede en derde modelregel verplaatsen naar de startwaarden.
Omdat Fz en k constanten zijn, kun je die ook beter als startwaarden opnemen: ze hoeven slechts een maal te worden berekend. Dat is iets eleganter.
Controleer eens of de hoekeenheid van je model is ingesteld op graden. Als ik radialen instel, krijg ik net als jij een grafiek die vanaf het begin daalt (y<0). Je kunt ook alles in radialen doen, maar dan moet je de startwaarde van alfa in radialen invoeren.
Verder valt op dat je tijdstap dt nogal groot is. Het is mogelijk dat je model hierdoor uit de bocht vliegt. Een kleinere tijdstap geeft dikwijls een beter resultaat. Ga na hoe klein je de tijdstap kunt maken, rekening houdend met het geringe aantal rekenlussen dat Coach 5 aankan (circa 16000). Coach 6 gaat tot 500.000 rekenlussen; is die versie op je school beschikbaar?
Misschien vind je het nuttig een stop-voorwaarde als modelregel op te nemen zoals "als y<0 dan stop eindals".
De tweede reactie van de heer De Klerk kan ik niet goed plaatsen. Wrijving is voor je vraagstelling van belang, en dan gelden de door de heer De Klerk genoemde formules niet.
Groeten,
Jaap Koole

Theo op 06 december 2010 om 21:53

>De tweede  reactie van de heer De Klerk kan ik niet goed plaatsen. Wrijving is voor je vraagstelling van belang, en dan gelden de door de heer De Klerk genoemde formules niet.<

Je hebt gelijk - met medeneming van de wrijving moet je e.e.a. stapsgewijs doorrekenen ipv mijn reactie over de "gewone" formules - dat bedacht ik veel later (toen de wrijvingsbijdrage me alweer ontschoten was).

En verder... Theo is ook goed al zit ik niet meer op school...

jeroen op 07 december 2010 om 14:04

Ten eerste bedankt voor jullie hulp,

Ik heb de modelinstellingen veranderd naar graden i.p.v radialen. Ik heb ook v0 in plaats van gewoon v ingevoerd. Om de vuurmondsnelheid erin te verwerken. En de constantes naar de statwaarden verplaatst. Ik krijg nu min of meer een kogelbaan, maar de afstand die hij aflegt is natuurlijk veel te groot en als ik de gegevens zoals; het gewicht verander heeft het weinig invloed. ik hoop dat jullie weten hoe ik verder moet.

grt jeroen


Theo op 07 december 2010 om 15:33

Ik vind het altijd moeilijk iemands programma te "debuggen"/ontvlooien maar ik denk dat er nog steeds een paar variabelen misbruikt worden voor meer doeleinden. Probeer eerst eens de beginsituatie op te stellen, dan te bepalen wat tijdens de vlucht telkens berekend moet worden en hoe dat van vorige resultaten afhangt.  In een soort "pseudo-code" (meer code dan pseudo geef ik toe) zou ik denken aan volgende structuur (en misschien vergeet ik nog wel wat - daarvoor is daarna de debugger... dus geen full/foolproof garantie)

/* beginwaarden geef je in: v0, hoek alfa (in eenheden die de functies cos/sin willen hebben, hoogte y0 en afstand x0, massa m, tijdsintervallen dt */

/* bereken beginwaarden hieruit */

/* begin snelheid en componenten */
v0x = v0 * cos (alpha)
v0y = v0 * sin (alpha)
/* begin wrijving(skracht/versnelling) en negatieve zwaartekrachtversnelling */
Fw0 = -k * v0 * v0
aw0x = Fw0 * cos (alpha) / m
aw0y = Fw0 * cos (alpha) / m
g = -9.81
/* initialiseer rekenvariabelen op de beginwaarden */
y = y0
x = x0
vx = v0x
vy = v0y
awx = aw0x
awy = aw0y + g

/* herhaal volgende stappen minstens 1 maal en dan tot y <= 0 (op de grond) */
repeat
    /* bereken waarden die voor deze stap getoond worden */
    vx = vx + awx * dt
    vy = vy + awy * dt
    y = y + vy*dt
    x = x + vx*dt

    /* zet alles klaar voor de volgende stap - andere snelheid, andere wrijving */
    v2 = vx*vx + vy*vy
    Fw = - k * v2
    baanhoek = arctan (vy / vx)
    awx = Fw * cos (baanhoek) / m
    awy = g + Fw * sin (baanhoek) / m

until y <= 0

 

jeroen op 09 december 2010 om 11:58

Ik heb het volgende berekend. 

ik heb nu geprobeerd hem steeds in stapjes te laten berekenen. Maar hij geeft als foutmelding dat de waarde buiten bereik ligt.

nog even voor de duidelijkheid:

v0y=v0*sin(alfa)
v0x=v0*cos(alfa)
Fw0=-k*v0*v0
aw0x=Fw0*cos(alpha)/m
aw0y=Fw0*sin(alpha)/m
repeteer 2000
vx=vx+awx*dt
vy=vy+awy*dt
y=y+vy*dt
x=x+vx*dt
v=sqrt(vx*vx+vy*vy)
Fw=-k*v*v
baanhoek=arctan(v0y/v0x)
awx=Fw*cos(baanhoek)/m
awy=g+Fw*sin(baanhoek)/m
t=t+dt
TotHier

m=0,00103
v0=368
alfa=75
A=6,36*10^-5
Cw=0,295
rholucht=1,293
x0=0
y0=2
t=0
dt=0,01
g=-9,81
Fz=-9,81*m
k=0,5*Cw*A*rholucht
v0x=vx
v0y=vy
awx=aw0x
awy=aw0y+g
y=y0
x=x0
  

 ik hoop dat u verder kan helpen.

Theo op 09 december 2010 om 15:21

"Repeteer 2000  tothier " lijkt me een vreemde constructie als je niet weet of je 2000 stappen nodig hebt. De conditie lijkt me te zijn dat y = 0 (op de grond, maar programmatisch is het dan handiger y <= 0 te nemen om zeker te zijn dat de loop stopt).

Als Coach geen repeat...until kent, zou je een oneindige loop kunnen nemen en dan vlak voor het einde van de code nog even controleren of y < 0 en dan met een Goto of zo de loop uitspringen.

De t = t + dt wordt verder nergens gebruikt - alleen nodig voor de t-as afbeelding neem ik aan. Verder zie ik de nelheid van vx / vy nergens ingevuld worden met de beginwaarden v0x en v0y  (wel andersom in de instelwaarden, maar waarom?)

Ik ken Coach verder niet dus verder uitvlooien/debuggen moet je zelf doen.

Jaap op 13 december 2010 om 00:08

Dag Jeroen,
Je kunt een goed model verkrijgen met de startwaarden
m=...
v=...
alfa=...
vx=v*...
vy=v*...
A=...
cw=...
rho=...
k=....
y=...
dt=0,0001
en de modelregels
als y<0 dan stop eindals
Fx=-k*...
Fy=-m*9,81-k*...
ax=...
ay=...
vx=vx+ax*dt
vy=vy+ay*dt
x=x+vx*dt
y=y+vy*dt
v=....
alfa=...
als y>ymax dan ymax=y eindals
t=t+dt
Het voorwerp landt na t=13,55 s met v=28,75 m/s op x=99,1 m van het vertrekpunt.
Groeten,
Jaap Koole

noranne op 12 februari 2018 om 17:54
hoi jeroen

ik heb een soort gelijke profiel werkstuk
in de hoop dat jij dit na 8 jaar nog gaat zien:
heb jij je profielwerkstuk nog en zou ik het door mogen lezen?

groet,
noranne

Plaats een reactie

+ Bijlage

Bevestig dat je geen robot bent door de volgende vraag te beantwoorden.

Ariane heeft zesentwintig appels. Ze eet er eentje op. Hoeveel appels heeft Ariane nu over?

Antwoord: (vul een getal in)