Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void stampajVektor(PVector v){
  2.     println("(" + v.x + ", " + v.y + ")");
  3. }
  4.  
  5. // Klasa za loptu
  6. class Lopta{
  7.     PVector polozaj; // Vektor polozaja
  8.     float duzina0; // Pocetna duzina
  9.     float duzina; // Trenutna duzina opruge
  10.     float koef; // Koeficijent elasticnosti
  11.     float masa; // Masa lopte, kao i precnik
  12.     float alfa; // Ugao izmedju ravnoteznog i trenutnog polozaja
  13.    
  14.     PVector opruznaSila; // Vektor opruzne sile
  15.     PVector brzina; // Vektor brzine
  16.     PVector ubrzanje; // Vektor ubrzanja
  17.  
  18.     Lopta(float mas, float duz, float koeff){  
  19.         brzina = new PVector(0, 0); // Brzina je na pocetku 0
  20.         ubrzanje = new PVector(0, 0); // Kao i ubrzanje
  21.         masa = mas;
  22.         duzina0 = duz;
  23.         duzina = duzina0; // Trenutna duzina je jednaka pocetnoj
  24.         polozaj = new PVector(0, duzina); // Vektor polozaja
  25.         koef = koeff;
  26.         alfa = 0; // Ugao je na pocetku 0
  27.         opruznaSila = new PVector(0, 0); // U ravnoteznom polozaju ne deluje sila
  28.     };
  29.    
  30.     // Racuna i postavlja opruznu silu
  31.     void izrOpruznuSilu(){
  32.         // x komponenta opruzne sile
  33.         float ox = -koef*(duzina-duzina0)*sin(alfa);
  34.         // y komponenta opruzne sile
  35.         float oy = -koef*(duzina-duzina0)*cos(alfa);
  36.        
  37.         opruznaSila.set(ox, oy);
  38.     }
  39.    
  40.     // F-ja koja prikazuje klatno i jos par stvari
  41.     void prikazi(){
  42.         // Prikazivanje lopte
  43.         stroke(0);
  44.         fill(255, 255, 255, 100);
  45.         ellipse(polozaj.x, polozaj.y, masa, masa);
  46.  
  47.         // Prikazivanje opruge
  48.         stroke(255, 0, 72);
  49.         strokeWeight(2);
  50.         line(0, 0, polozaj.x, polozaj.y);
  51.  
  52.         // Ispis ugla i duzine
  53.         stroke(0);
  54.         fill(0);
  55.         text(duzina, 100, 100);
  56.         text(alfa * 59.27, 200, 100);
  57.  
  58.         // Iscrtavanje vektora brzine
  59.         stroke(0);
  60.         fill(0);
  61.         strokeWeight(1);
  62.         line(polozaj.x, polozaj.y, polozaj.x + 2*brzina.x, polozaj.y + 2*brzina.y);
  63.     };
  64.    
  65.     void promeniUgao(){
  66.         alfa = atan(polozaj.x / polozaj.y);
  67.     };
  68.    
  69.    // Funkcija koja pomera klatno u novi polozaj,
  70.    // racuna duzinu opruge u tom polozaju, ugao i
  71.    // izracunava opruznu silu
  72.     void pomeri(PVector novi){
  73.         polozaj = novi;
  74.         duzina = polozaj.mag();
  75.         promeniUgao();
  76.         izrOpruznuSilu();
  77.     };
  78.  
  79.     // Funkcija koja update-uje brzinu, polozaj i ubrzanje
  80.     void update(){
  81.       brzina.add(ubrzanje);
  82.       pomeri(PVector.add(polozaj, brzina));
  83.       ubrzanje.mult(0);
  84.     }
  85.     /*
  86.     void primeniSilu(PVector sila){
  87.         ubrzanje.add(PVector.mult(sila, 1/masa));
  88.     };
  89.     */
  90.  
  91.     void primeniSilu(PVector sila){
  92.         if(polozaj.y >= 0)
  93.             ubrzanje.add(PVector.mult(sila, 1/masa));
  94.         else
  95.             ubrzanje.sub(PVector.mult(sila, 1/masa));
  96.     }
  97.     // Postavlja brzinu i ubrzanje na 0
  98.     void resetuj() {
  99.       ubrzanje.set(0, 0);
  100.       brzina.set(0, 0);
  101.     }
  102.  
  103. };
  104.  
  105. PVector gravitacija; // Gravitaciona sila
  106. Lopta l; // Nasa lopta
  107.  
  108. void setup(){
  109.     size(1024, 1000); // Dimenzije ekrana
  110.     gravitacija = new PVector(0,5);
  111.     l = new Lopta(100, 300, 0.1);
  112. };
  113.  
  114. void draw(){
  115.     // Postavljanje novog koordinatnog pocetka
  116.     translate(width/2, 0);
  117.     background(200, 255, 255);
  118.    
  119.     // Dodajemo sile koje deluju na klatno
  120.     l.primeniSilu(gravitacija);
  121.     l.primeniSilu(l.opruznaSila);  
  122.    
  123.     // Update-ujemo brzinu, polozaj i ubrzanje
  124.     l.update();
  125.     l.prikazi();
  126. };
  127.  
  128. // Na klik misa se klatno postavlja u zeljeni polozaj
  129. void mouseClicked(){
  130.     l.pomeri(new PVector(mouseX-width/2, mouseY));
  131.     l.resetuj();
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement