Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Fra vinkel og starthastighet kan farten dekomponeres i x og y-retning:


vx = cos(angle)*initialSpeed
vy = sin(angle)*initialSpeed

 

Vi starter med å skrive funksjonen initVelocity(initalAngle, initialSpeed).

...

Tips: cos og sin i Matlab regner med radianer. Bruk derfor cosd og sind eller benytt følgende: grader = radianer*(180/pi)


Code Block
titleEksempel på kjøring

...

Code Block
languagenone
>> [vx,vy] = initVelocity(0,100)
vx =
   100
vy =
     0
>> [vx,vy] = initVelocity(90,100)
vx =
     0
vy =
   100
>> [vx,vy] = initVelocity(45,100)
vx =
   70.7107
vy =
   70.7107

...

Nå har vi regnet ut startfarten i x- og y-retning. Siden strekning = fart * tid vil den nye posisjonen være gitt ved: 


       

her har vi en konstant, dt, som er et tidsintervall på 0.01 sekunder.

 

        Skriv funksjonen med signaturen function[x, y] = position(x, y, vx, vy, dt)som kalkulerer

Denne skal kalkulerere x- og y-koordinatet i neste steg, ut ifra det nåværende stegets posisjon og fart

 

  

 

Code Block
titleEksempel på kjøring
>> [x, y] = position (10, 10, 1, 1, 0.1)
x =
   10.1000
y =
   10.1000
>> [x, y] = position (10, 10, 1, 0, 1)
x =
    11
y =
    10
>> [x, y] = position (10, 10, 0, 1, 1)
x =
    10
y =
    11

 

                                                               
 

c)

 

...

Akselerasjonen er i denne oppgaven gitt ved:

 

 

Her  Her har vi en konstant, k = 0.01, som representerer luftmotstanden og g, som er gravitasjonskonstanten (9.81 på jorden). 

...

Lag funksjonen plotTrajectory(initialSpeed, initialAngle, height). Denne har de samme parameterene som trajectory().

Den skal benytte seg av plot()-funksjonen for å vise kulens bane.  

Code Block
languagetitlenoneEksempel på kjøring
>> plotTrajectory(100,45,10)

...

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.  

...

Code Block
titleEksempel på kjøring
>> plotTrajectoryLength(100,0,45/8,90,10)


Utskriften fra funksjonen skal se nogenlunde slik ut:


 

h) 

Det ønskes en enkel måte å visualisere kulestøtet som en animasjon. Se om alt fungerer ved å lagre koden under og kjøre den med noen verdier. 
 

Code Block
languagenone
function animate(initialSpeed, initialAngle, height)
	[xliste, yliste]= trajectory(initialSpeed, initialAngle, height);
	dt=0.1; % Setter tidsintervall
   	
    xmax = max(xliste);                 
    xmin = min(xliste);
    ymax = max(yliste);
    ymin = min(yliste);
    xlen = length(xliste);
    axis([xmin xmax ymin ymax]);        
    hFig = figure(1);                   
    set(hFig, 'Position', [xmin ymin 1200 800])

	for i = [1:length(xliste)]               		% printer plottet, ett steg lengre for hver iterasjon
    	hold on;                             	% Vil beholde det eksisterende plottet.
    	plot(xliste(1:i),yliste(1:i), '-k'); 	% Hva skjer her?
    	pause(dt/initialSpeed*2);           		% Koden kjører for fort, ber den pause med "dt"
	end
end