Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void stampajVektor(PVector v){
- println("(" + v.x + ", " + v.y + ")");
- }
- // Klasa za loptu
- class Lopta{
- PVector polozaj; // Vektor polozaja
- float duzina0; // Pocetna duzina
- float duzina; // Trenutna duzina opruge
- float koef; // Koeficijent elasticnosti
- float masa; // Masa lopte, kao i precnik
- float alfa; // Ugao izmedju ravnoteznog i trenutnog polozaja
- PVector opruznaSila; // Vektor opruzne sile
- PVector brzina; // Vektor brzine
- PVector ubrzanje; // Vektor ubrzanja
- Lopta(float mas, float duz, float koeff){
- brzina = new PVector(0, 0); // Brzina je na pocetku 0
- ubrzanje = new PVector(0, 0); // Kao i ubrzanje
- masa = mas;
- duzina0 = duz;
- duzina = duzina0; // Trenutna duzina je jednaka pocetnoj
- polozaj = new PVector(0, duzina); // Vektor polozaja
- koef = koeff;
- alfa = 0; // Ugao je na pocetku 0
- opruznaSila = new PVector(0, 0); // U ravnoteznom polozaju ne deluje sila
- };
- // Racuna i postavlja opruznu silu
- void izrOpruznuSilu(){
- // x komponenta opruzne sile
- float ox = -koef*(duzina-duzina0)*sin(alfa);
- // y komponenta opruzne sile
- float oy = -koef*(duzina-duzina0)*cos(alfa);
- opruznaSila.set(ox, oy);
- }
- // F-ja koja prikazuje klatno i jos par stvari
- void prikazi(){
- // Prikazivanje lopte
- stroke(0);
- fill(255, 255, 255, 100);
- ellipse(polozaj.x, polozaj.y, masa, masa);
- // Prikazivanje opruge
- stroke(255, 0, 72);
- strokeWeight(2);
- line(0, 0, polozaj.x, polozaj.y);
- // Ispis ugla i duzine
- stroke(0);
- fill(0);
- text(duzina, 100, 100);
- text(alfa * 59.27, 200, 100);
- // Iscrtavanje vektora brzine
- stroke(0);
- fill(0);
- strokeWeight(1);
- line(polozaj.x, polozaj.y, polozaj.x + 2*brzina.x, polozaj.y + 2*brzina.y);
- };
- void promeniUgao(){
- alfa = atan(polozaj.x / polozaj.y);
- };
- // Funkcija koja pomera klatno u novi polozaj,
- // racuna duzinu opruge u tom polozaju, ugao i
- // izracunava opruznu silu
- void pomeri(PVector novi){
- polozaj = novi;
- duzina = polozaj.mag();
- promeniUgao();
- izrOpruznuSilu();
- };
- // Funkcija koja update-uje brzinu, polozaj i ubrzanje
- void update(){
- brzina.add(ubrzanje);
- pomeri(PVector.add(polozaj, brzina));
- ubrzanje.mult(0);
- }
- /*
- void primeniSilu(PVector sila){
- ubrzanje.add(PVector.mult(sila, 1/masa));
- };
- */
- void primeniSilu(PVector sila){
- if(polozaj.y >= 0)
- ubrzanje.add(PVector.mult(sila, 1/masa));
- else
- ubrzanje.sub(PVector.mult(sila, 1/masa));
- }
- // Postavlja brzinu i ubrzanje na 0
- void resetuj() {
- ubrzanje.set(0, 0);
- brzina.set(0, 0);
- }
- };
- PVector gravitacija; // Gravitaciona sila
- Lopta l; // Nasa lopta
- void setup(){
- size(1024, 1000); // Dimenzije ekrana
- gravitacija = new PVector(0,5);
- l = new Lopta(100, 300, 0.1);
- };
- void draw(){
- // Postavljanje novog koordinatnog pocetka
- translate(width/2, 0);
- background(200, 255, 255);
- // Dodajemo sile koje deluju na klatno
- l.primeniSilu(gravitacija);
- l.primeniSilu(l.opruznaSila);
- // Update-ujemo brzinu, polozaj i ubrzanje
- l.update();
- l.prikazi();
- };
- // Na klik misa se klatno postavlja u zeljeni polozaj
- void mouseClicked(){
- l.pomeri(new PVector(mouseX-width/2, mouseY));
- l.resetuj();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement