Klizanje tela niz strmu ravan u Processing-u
Simulacija klizanja tela niz strmu ravan predstavlja koristan način da se praktično prikažu osnovni zakoni fizike, uključujući sile gravitacije, trenja i reakcije podloge. Na strmoj ravni, telo pod uticajem težine doživljava razlaganje sile u komponente koje deluju paralelno i normalno u odnosu na površinu. Ova animacija u Processing-u koristi vizuelne elemente kako bi simulirala pokrete tela niz kosinu, uz uvođenje pokretnog koordinatnog sistema koji prati kretanje tela. Simulacija pomaže u razumevanju dinamike na kosoj ravni i čini učenje interaktivnijim.
Simulaciju kreiranu pomoću P5 javascript-a pogledajte na web strani:kosi-hitac.onrender.com/klizanje_tela_niz_strmu_ravanKreirajmo simulaciju klizanja nekog tela niz strmu ravan.

Telo se nalazi na strmoj ravni koja je pod nekim uglom alfa zaokrenuta u odnosu na horizontalnu ravan. Na telo deluje sila zemljine teže Q, i ona se može razložiti na 2 komponente: Fa koja je u pravcu paralelnom strmoj ravni i FN, normalnu komponentu koja je u pravcu normale na tu strmu ravan. Sila reakcije podloge N se kompenzuje sa ovom normalnom komponentom jer je istog pravca, ali suprotnog smera i ne utiče na kretanje. Sila trenja se suprotstavlja kretanju i ima pravac kose ravni, ali je suprotnog smera od vektora brzine.
Da bi telo počelo da se spušta mora da bude zadovoljen uslov:
F a >= F tr
Sila trenja je pasivna sila i postoji samo u slučaju da postoji aktivna sila koja teži da izazove kretanje tela i uvek ima pravac isti kao i brzina tela, ali suprotan smer. Aktivna sila je u ovom slučaju komponenta na pravac podloge od težine tela, označena sa Fa.
Sila trenja s jedne strane zavisi od vrste podloge i uticaj se meri koeficijentom trenja, a sa druge strane, zavisi i od intenziteta normalne sile na podlogu N. Sila trenja se dakle, izračunava:
F tr = μ * N;
gde je
μ -
koeficijent trenja,
N - normalna sila koja deluje na podlogu
Da bi kreirali simulaciju uočimo pravougli trougao koji predstavlja tlo na koje se nalazi telo koje se kliza u pravcu hipotenuze.
katete trougla su poznate i označićemo naspramnu sa H(visina), a naleglu sa L.
Ugao alfa se može odrediti:
alpha = atan(H / L);
Simulaciju ćemo kreirati u pokretnom koordinatnom sistemu vezanom za telo(X1 O1 Y1)

Pokretni koordinatni sistem se može dobiti translacijom XOY koordinatnog sistema prvo za H-height/2-h/2/cos(fi), a zatim rotacijom za ugao fi.

Otvorimo nov skeč, dodajmo setup i draw metode. U njima možemo da postavimo boju pozadine background(100) i da kreiramo oblike trougla i tela(pravougaonika).
Kod sa slike 4: Animacija klizanja tela niz strmu ravan u processing-u, osnovno
float H = 300; // visina strme ravni
float L = 600; // dužina osnove
float fi; // ugao nagiba
PShape tlo;
PShape rect;
float w = 80; // širina tela
float h = 40; // visina tela
void setup() {
size(1000, 500, P2D);
fi = atan(H / L);
tlo = createShape(TRIANGLE, 0, height - H, 0, height, L, height);
tlo.setFill(color(0, 255, 0));
rectMode(CENTER);
rect = createShape(RECT, 0, 0, w, h);
rect.setFill(color(0, 0, 255));
}
void draw() {
background(100);
}

Da bi mogli da kreiramo trougao, potrebno je prethodno definisati i inicijalizovati visinu H, kao i dužinu L. Unutar setup metode možemo izračunati ugao nagiba preko funkcije arkus tangens od H/L:
Za kreiranje tela, kao i trougla koristimo processing-ovu klasu PShape (vidi referencu: https://processing.org/tutorials/pshape)
Promenljive w i h predstavljaju širinu i visinu tela. Za ova dva oblika su podešene i boje za ispunu, metodom setFill i upotrebom metode color koja na osnovu RGB vrednosti kreira boju.
U nastavku vršimo pomeranje koo sistema pomoću translacija kao što je prikazano u narednom kodu:
Kod sa slike 5: Animacija klizanja tela niz strmu ravan u processing-u, crtanje tla
float H = 300; // visina strme ravni
float L = 600; // dužina osnove
float fi; // ugao nagiba
PShape tlo;
PShape rect;
float w = 80; // širina tela
float h = 40; // visina tela
void setup() {
size(1000, 500, P2D);
fi = atan(H / L);
tlo = createShape(TRIANGLE, 0, height - H, 0, height, L, height);
tlo.setFill(color(0, 255, 0));
rectMode(CENTER);
rect = createShape(RECT, 0, 0, w, h);
rect.setFill(color(0, 0, 255));
}
void draw() {
background(100);
shape(tlo);
translate(0, height - H - h / 2);
shape(rect);
}

Ako pokrenemo kod videćemo:

Sledeće što treba uraditi je rotacija za ugao fi, i pomeranje početnog položaja translacijom za 50px:
rotate(fi);
translate(50, 0);
Docrtaćemo još i koordinatne ose da bi pratili kako se pomera pokretni sistem: Sada kod izgleda kao na sledećoj slici:
Kod sa slike 6: Animacija klizanja tela niz strmu ravan u processing-u,crtanje osa
float H = 300; // visina strme ravni
float L = 600; // dužina osnove
float fi; // ugao nagiba
PShape tlo;
PShape rect;
float w = 80; // širina tela
float h = 40; // visina tela
PShape xOsa;
PShape yOsa;
void setup() {
size(1000, 500, P2D);
fi = atan(H / L);
tlo = createShape(TRIANGLE, 0, height - H, 0, height, L, height);
tlo.setFill(color(0, 255, 0));
rectMode(CENTER);
rect = createShape(RECT, 0, 0, w, h);
rect.setFill(color(0, 0, 255));
xOsa = createShape(LINE, 0, 0, 100, 0);
yOsa = createShape(LINE, 0, 0, 0, 100);
}
void draw() {
background(100);
shape(tlo);
translate(0, height - H - h / 2);
rotate(fi);
translate(50, 0);
shape(rect);
xOsa.setStroke(color(255, 255, 50));
yOsa.setStroke(color(255, 150, 50));
shape(xOsa);
shape(yOsa);
}

Dodavanje kretanja telu
Da bi smo uveli kretanje tela, potrebno je da dodamo sledeće fizičke veličine:
PVector polozaj;
PVector v;
PVector a;
static final float G = 9.81;
float m = 1;
Vektor položaja određuje tačku centra tela koja kliza po kosoj ravni. Sa v je označena brzina tela, a je ubrzanje, G je gravitaciona konstanta i m je masa čija je vrednost postavljena na 1kg.
Unutar setup() metode treba dodati sledeći kod:
//Keiranje vektora ubrzanja, brzine i položaja, potrebnih za kretanje tela
a = new PVector(1, 0);
v = new PVector(0, 0);
polozaj = new PVector(50, 0);
Unutar draw() metode, treba dodati sledeće:
//kretanje
v.add(PVector.div(a, frameRate));
polozaj.add(v);
translate(polozaj.x, polozaj.y);
Vrednost intenziteta ubrzanja a se prvo podeli sa konstantom frameRate, da bi se dobila promena brzine za interval vremena između dva poziva draw() metode. Ova vrednost se dodaje vektoru brzine, koja će da uveća njen intenzitet. Na kraju, promena položaja je definisana vrednošću v, pa se koristi metoda add za vektorsko sabiranje položaja i vektora brzine v.
Više o vektorima pročitajte na strani: Vektori u Processing-u.Kompletan skeč se može videti na sledećoj slici, gde je dodat kod za kretanje, podvučen crvenim linijama:
Kod sa slike 7: Animacija klizanja tela niz strmu ravan u processing-u, kompletan kod
float H = 300; // visina strme ravni
float L = 600; // dužina osnove
float fi; // ugao nagiba
PShape tlo;
PShape rect;
float w = 80; // širina tela
float h = 40; // visina tela
PShape xOsa;
PShape yOsa;
PVector polozaj; // ← novo
PVector v; // ← novo
PVector a; // ← novo
static final float G = 9.81; // ← novo
float m = 1; // ← novo
void setup() {
size(1000, 500, P2D);
fi = atan(H / L);
tlo = createShape(TRIANGLE, 0, height - H, 0, height, L, height);
tlo.setFill(color(0, 255, 0));
rectMode(CENTER);
rect = createShape(RECT, 0, 0, w, h);
rect.setFill(color(0, 0, 255));
xOsa = createShape(LINE, 0, 0, 100, 0);
yOsa = createShape(LINE, 0, 0, 0, 100);
// Kretanje
a = new PVector(1, 0); // ← novo
v = new PVector(0, 0); // ← novo
polozaj = new PVector(50, 0); // ← novo
}
void draw() {
background(100);
shape(tlo);
translate(0, height - H - h / 2);
rotate(fi);
// kretanje
v.add(PVector.div(a, frameRate)); // ← novo
polozaj.add(v); // ← novo
translate(polozaj.x, polozaj.y); // ← novo
shape(rect);
xOsa.setStroke(color(255, 255, 50));
yOsa.setStroke(color(255, 150, 50));
shape(xOsa);
shape(yOsa);
}

Na slici ispod, možete videti kako izgleda animacija klizanja tela niz strmu ravan.
Processing primer: Strma ravan 2
Prethodni primer klizanja tela niz strmu ravan, može dalje da se razvije, tako da klikom na kontrolnu tačku, istu selektujemo, a zatim sa prevlačenjem miša(mouseDragged) menjamo njenu visinu, a samim tim da se promeni i ugao nagiba kose ravni. Takođe treba da se prikažu i sledeći podaci: Brzina klizanja, ugao nagiba, sila trenja-intenzitet, kao i koeficijent trenja. Animacija je prikazana u nastavku, a rešenje(kod) na sledećosj strani.
Objašnjenje i kompletnu analiza primera pročitajte na strani: Analiza klizanja tela niz strmu ravan primer
Proveri znanje
Otvori kviz
Kviz: Strma ravan
1. Koja komponenta težine pokreće telo niz strmu ravan?
2. Zašto se koordinatni sistem rotira za ugao strme ravni?
3. Ubrzanje tela bez trenja na strmoj ravni je:
4. Šta radi rotate(ugao)?
| Prethodno |< Primer kosog hica u processingu |
Sledeće Analiza klizanja tela niz strmu ravan primer >| |
PRIMER KLIZANJA TELA NIZ STRMU RAVAN U PROCESSING-U
Simulacija klizanja tela niz strmu ravan predstavlja koristan način da se praktično prikažu osnovni zakoni fizike, uključujući sile gravitacije, trenja i reakcije podloge. Na strmoj ravni, telo pod uticajem težine doživljava razlaganje sile u komponente koje deluju paralelno i normalno u odnosu na površinu. Ova animacija u Processing-u koristi vizuelne elemente kako bi simulirala pokrete tela niz kosinu, uz uvođenje pokretnog koordinatnog sistema koji prati kretanje tela. Simulacija pomaže u razumevanju dinamike na kosoj ravni i čini učenje interaktivnijim.Simulaciju kreiranu pomoću P5 javascript-a pogledajte na web strani:kosi-hitac.onrender.com/klizanje_tela_niz_strmu_ravanKreirajmo simulaciju klizanja nekog tela niz strmu ravan.
Da bi telo počelo da se spušta mora da bude zadovoljen uslov:
Sila trenja s jedne strane zavisi od vrste podloge i uticaj se meri koeficijentom trenja, a sa druge strane, zavisi i od intenziteta normalne sile na podlogu N. Sila trenja se dakle, izračunava:
gde je
μ - koeficijent trenja,
N - normalna sila koja deluje na podlogu
katete trougla su poznate i označićemo naspramnu sa H(visina), a naleglu sa L.
Ugao alfa se može odrediti:
Za kreiranje tela, kao i trougla koristimo processing-ovu klasu PShape (vidi referencu: https://processing.org/tutorials/pshape)
Promenljive w i h predstavljaju širinu i visinu tela. Za ova dva oblika su podešene i boje za ispunu, metodom setFill i upotrebom metode color koja na osnovu RGB vrednosti kreira boju.
U nastavku vršimo pomeranje koo sistema pomoću translacija kao što je prikazano u narednom kodu:
translate(50,0);
Dodavanje kretanja telu
Da bi smo uveli kretanje tela, potrebno je da dodamo sledeće fizičke veličine:PVector v;
PVector a;
static final float G=9.81;
float m=1;
Unutar setup() metode treba dodati sledeći kod:
a=new PVector(1,0);
v=new PVector(0,0);
polozaj=new PVector(50,0);
v.add(PVector.div(a,frameRate));
polozaj.add(v);
translate(polozaj.x,polozaj.y);
Više o vektorima pročitajte na strani: Vektori u Processing-u.Kompletan skeč se može videti na sledećoj slici, gde je dodat kod za kretanje, podvučen crvenim linijama:
Animacija ne radi? Učitajte stranicu ponovo(refresh)
← scroll horizontal →
Processing primer: Strma ravan 2
Prethodni primer klizanja tela niz strmu ravan, može dalje da se razvije, tako da klikom na kontrolnu tačku, istu selektujemo, a zatim sa prevlačenjem miša(mouseDragged) menjamo njenu visinu, a samim tim da se promeni i ugao nagiba kose ravni. Takođe treba da se prikažu i sledeći podaci: Brzina klizanja, ugao nagiba, sila trenja-intenzitet, kao i koeficijent trenja. Animacija je prikazana u nastavku, a rešenje(kod) na sledećosj strani.Animacija ne radi? Učitajte stranicu ponovo(refresh)
← scroll horizontal →
| Prethodno |< Primer kosog hica u processingu |
Sledeće Analiza klizanja tela niz strmu ravan primer >| |
