...
Fra vinkel og starthastighet kan farten dekomponeres i x og y-retning:
vx = cos(angle)*speed
vy = sin(angle)*speed
Skriv funksjonen initalVelocity initVelocity(initalAngle, speed)
. Denne skal returnere initialhastighet i x og y-retning.
Tips: cos og sin i Matlab regner med radianer. Bruk derfor cosd
og sind
eller benytt følgende: grader = radianer*(180/pi)
Eksempel på kjøring:
Code Block | ||
---|---|---|
| ||
>> [vx, vy] = initialVelocityinitVelocity (0, 100) vx %= skal returnere vx100 vy = 100 , vy = 0 >> [vx, vy] = initialVelocityinitVelocity (pi /2, 100) vx %= skal returnere vx = 6.1232e -15 vy ,= vy = 100 >> [vx, vy] = initialVelocityinitVelocity (pi /4, 100) % skal returnere vx = vx = 70.7107 vy ,= vy = 70.7107 |
b)
Farten i x- og y-retning er beregnet. Siden strekning = fart * tid vil den nye posisjonen være gitt ved:
...
Skriv funksjonen med signaturen function [x, y] = position(x, y, vx, vy, dt)
som kalkulerer x- og y-koordinatet i neste steg, ut ifra det nåværende stegets posisjon og fart.
Funksjonen kan testes med følgende skriptEksempel på kjøring:
Code Block | ||
---|---|---|
| ||
[x, y] = position (10 , 10, 0, 1, 1) % skal returnere x = 10, y = 11
[x, y] = position (10 , 10, 1, 0, 1) % skal returnere x = 11, y = 10
[x, y] = position (10 , 10, 1, 1, 0.1) % skal returnere x = 10.1 , y = 10.1 |
c)
Akselerasjonen er i denne oppgaven gitt ved:
...
Skriv function [ax, ay] = acceleration(vx, vy).
Funksjonen kan testes med følgende skriptEksempel på kjøring:
Code Block | ||
---|---|---|
| ||
>> [ax, ay] = acceleration (0, 0) ax %= skal returnere x = 0, ay = y = -9.818100 >> [ax, ay] = acceleration (10 , 10) % skal returnere x = ax = -1, ay y= = -10.818100 |
d)
Skriv function [vx, vy] = velocity(ax, ay, vx, vy, dt)
. Denne beregner farten i det neste steget gitt nåværende fart og akselerasjon.
Eksempel på kjøring:
Code Block | ||
---|---|---|
| ||
>> [vx,vy] = velocity(1,1,0,0,0.1)
vx =
0.1000
vy =
0.1000
>> [vx,vy] = velocity(-3,-9.81,50,20,1)
vx =
47
vy =
10.1900 |
e)
Skriv function [xv, yv] = trajectory(initialSpeed, initialAngle,
height)
. Denne funksjonen benytter seg av initialVelocity,
acceleration,
velocity
og position
. Den skal returnere en liste for x-koordinater og en liste for y-koordinater.
Tiden kulen bruker på å treffe bakken er ukjent, en while-løkke må derfor benyttes. Denne skal terminere når høyden blir mindre enn 0.
...
Lag funksjonen plotTrajectory
. Denne skal ha samme parameterene som trajectory
. Den skal benytte seg av plot
-funksjonen for å vise kulens bane.
Code Block | ||
---|---|---|
| ||
>> plotTrajectory(100,pi/4,10) |
g)
Lag funksjonen plotTrajectoryLength(initialSpeed, start, step, stop, height).
Den skal kalle trajectory
med vinkler mellom start
og stop
, med steglengde step
. Deretter skal den plotte vinklene mot de korresponderende lengdene av kulestøtet.
Kjør funksjonen med start = 0, step = pi/32 og stop = pi/2.
Eksempel på kjøring:
Code Block | ||
---|---|---|
| ||
>> plotTrajectoryLength(100,0,pi/32,pi/2,10) |
Til ettertanke:
Hvilken vinkel gir best resultat?
Hva skjer om man endrer på høyden?
Hva skjer om k og g endres?
Har farten noe å si for vinkelen?
...