6 Poikittainen aaltoliike
Tehtävässä on tarkoitus rakentaa simulaatio köydestä, jolla voimme tutkia poikittaista aaltoliikettä. Köysi rakennetaan yksittäisistä palloista. Koodissa on aluksi luotu muuttuja "pallo_lkm", jolla voimme säätää köydessä olevien pallojen lukumäärää.
Käydään läpi kuinka pallot on luotu:
- Luodaan ensin lista nimeltä "pallot". Tähän listaan säilömme luomamme pallot.
- Sitten luodaan for-silmukka, jossa i käy läpi arvot 0 - "pallo_lkm" lukumäärä: for i in range (pallo_lkm).
- Silmukan sisällä luodaan punainen pallo, JOS i on jaollinen viidellä. (Eli joka viides pallo on punainen. (if)
- Muutoin luodaan valkoinen pallo. (else)
Tehtävät:
Osa 1 - simulaation luominen
- Luo muuttuja "k", joka kuvaa köyden jäykkyyttä. Aseta arvoksi vaikka 50.
- Luo muuttuja "massa", joka on nyt yksittäisten, käyden muodostavien pallojen massa. Anna arvoksi melko pieni arvo, esim. 0,05.
- Luo muuttuja "vaim_kerroin", joka kuvaa aallon vaimenemista köydessä. Anna arvoksi esim. 3.
- Luo while-silmukka, joka pyörii "ikuisesti" (eli niin kauan, kun ohjelma jotenkin keskeytetään) ja aseta haluamasi rate.
- Seuraavaksi luo while-silmukan sisään for-silmukka, jossa i käy läpi arvot 1 - pallojen lukumäärä. Näin kierros päästään aloittamaan toisesta pallosta, sillä ensimmäisen pallon indeksi on 0 (pallot[0] on siis ensimmäinen pallo)
- Kirjoita for-silmukan sisään palloon i (pallot[i]) kohdistuvan voiman suuruus.
- Kirjoita for-silmukan sisään pallon i uusi nopeus siihen kohdistuvan voiman avulla.
- Kirjoita for-silmukan sisään pallon i uusi paikka siihen kohdistuvan voiman avulla.
- Kasvata lopuksi while-silmukan sisällä aikaa ajan muutoksella. Silmukat kokonaisuudessaan:
k = 50# N/m
massa = 0.05 # kg
vaim_kerroin = 2
for i in range(1,pallo_lkm):
F = -k*(pallot[i].pos.y-pallot[i-1].pos.y)-vaim_kerroin*pallot[i].nopeus
pallot[i].nopeus = pallot[i].nopeus + F/massa*dt
pallot[i].pos = pallot[i].pos + vector(0,pallot[i].nopeus,0)*dt
while (True):
rate(500)
for i in range(1, pallo_lkm):
F = -k*(pallot[i].pos.y-pallot[i-1].pos.y)-vaim_kerroin*pallot[i].nopeus
pallot[i].nopeus = pallot[i].nopeus + F/massa*dt
pallot[i].pos = pallot[i].pos + vector(0,pallot[i].nopeus,0)*dt
t = t + dt
Osa 2 - simulaation tutkiminen
- Mitä voit sanoa poikittaisesta aaltoliikkeestä simulaation perusteella (Miten syntyy? Mikä ilmiössä liikkuu ja mihin suuntaan?)
- Tee ennuste siitä, miten köyden jäykkyys vaikuttaa aallon etenemisnopeuteen. Tutki asiaa.
- Tutki, miten vaimenemiskerroin vaikuttaa aaltoliikkeeseen.