Fysik
Matlab programmering
Jeg skal få en figur til at bevæge sig i matlab, og dette er lidt mere indviklet end først antaget. Figurens form er for mit spørgsmål underordnet, men den skal bevæge sig af ven vektor med (vx,vy) i tidsperioden t=[0:100]
hvis figuren bevæger sig længere end et bestemt x, flyttes det til et andet x.
Jeg havde i første gang tænkt mig at benytte fill komandoen på følgende måde:
for t=[0;100]
fill([[x]+vx*t],[[y]+vy*t],'r')
hold on
end
Men her tegner den jo alle de mellemliggende figurer, hvilket den jo slet ikke skal, da den skal lave en film. Er der nogle der har en idee til hvordan man kan få simuleret figurens bevægelse, og ikke mindst flyttet den.
Svar #1
15. november 2008 af Jerslev (Slettet)
#0: Du skal fjerne hold on. Hold on kommandoen gør, at den lader figurer blive, der i forvejen er der. En mulighed er at introducere pause(0.1) efter fill kommandoen. Dermed pauser programmet lige i 0.1 sekund og man kan se, at den flytter sig.
Svar #2
16. november 2008 af Rdefik (Slettet)
Det virker jo fint! Men hvorledes får jeg flyttet figuren, når den løber ud over en nærmere fastsat x-koordinat, til en helt anden x-koordinat ?( meneningen med dette er jo naturligvis at figuren flyttes tilbage, hvis den løber for langt ud)
Svar #3
16. november 2008 af Rdefik (Slettet)
Her er så hvordan jeg i første omgang havde tænkt mig at flytte figuren, men det virker ikke.
%Vi starter med at få ploygonet tegnet. Vi definer først
j=sqrt(2)/2;
fill([1/5 j/5 0 -j/5 -1/5 -j/5 0 j/5],[0 j/5 1/5 j/5 0 -j/5 -1/5 -j/5 ],'b')
%og indstiller aksernes størrelser i overensstemmelse med forskrifterne.
axis([-2.7 2.7 -2 2])
%figuren skal bevæge sig af en vektor (vx,vy) der angiver hastighed i hhv.
%x og y retningen.
%disse hastigheder vælges ved
vx= RANDOM('unif',-.5,.5);
vy= RANDOM('unif',-.5,.5);
%nu er vi klar til at skrive et program, der får figuren til at bevæge sig
%i løbet af 100 tidsenheder
for t=[0:100]
fill([[1/5 j/5 0 -j/5 -1/5 -j/5 0 j/5]+vx*t],[[0 j/5 1/5 j/5 0 -j/5 -1/5 -j/5 ]+vy*t],'b')
axis([-10 10 -10 10])
pause (0.5)
%figuren flyttes hvis x koordinaten overskrider intervallet [-4,6] Som test på af figuren flyttes, skiftes også farve.
if vx*t>6
fill([[(1/5)+2 (j/5)+2 0+2 -(j/5)+2 -(1/5)+2 -(j/5)+2 0+2 (j/5)+2]+vx*t],[[0 j/5 1/5 j/5 0 -j/5 -1/5 -j/5 ]+vy*t],'r')
end
if -4<vx*t
fill([[(1/5)-1 (j/5)-1 0-1 -(j/5)-1 -(1/5)-1 -(j/5)-1 0-1 (j/5)-1]+vx*t],[[0+1 (j/5)+1 (1/5)+1 (j/5)+1 0+1 -(j/5)+1 -(1/5)+1 -(j/5)+1 ]+vy*t],'y')
end
end
Svar #4
16. november 2008 af Jerslev (Slettet)
#2: Jeg vil foreslå en if-løkke. Du skal blot spørge programmet for hver flytning, om x-koordinaten er udover den værdi, du har fastsat.
Svar #5
16. november 2008 af Rdefik (Slettet)
Jo nu er den ved at være der.
Jeg har dog dog et sidste spørgsmål, af rent nysgerrighed. Hvorledes kan simuler således at man får en figur til at følge en funktionsforskrift - altså ikke bare en konstant vektor som i mit tilfælde?
Så man fx kunne simuler bevægelse under indflydelse af gravtationen.
Svar #6
16. november 2008 af Jerslev (Slettet)
#5: I så fald skal du blot gøre vektoren, som programmet henter x-koordinater fra (eller generelle koordinater) til en funktion af din for-løkke parameter.
Svar #7
18. november 2008 af Daniel TA (Slettet)
#6 Du er ret god til MatLab. Troede ikke du kunne lide det?
Svar #9
20. november 2008 af Daniel TA (Slettet)
Hvad nu hvis man ikke vil benytte if-løkker, men vil holde sig til mod funktionen.?
Svar #11
20. november 2008 af Daniel TA (Slettet)
Mod(....,a)
Den funktion finder resten ved division af a.
Svar #12
20. november 2008 af Jerslev (Slettet)
#11: Nåe - modulus - jeg er ikke særlig bekendt med den funktion.
Skriv et svar til: Matlab programmering
Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk?
Klik her for at oprette en bruger.
