Advertisement
Guest User

Untitled

a guest
May 25th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.70 KB | None | 0 0
  1. void stampajVektor(PVector v){
  2. println("(" + v.x + ", " + v.y + ")");
  3. }
  4. void arrow(float x1, float y1, float x2, float y2, int r, int g, int b) {
  5. fill(r, g, b);
  6. stroke(r, g, b);
  7. strokeWeight(2);
  8. line(x1, y1, x2, y2);
  9. pushMatrix();
  10. translate(x2, y2);
  11. float a = atan2(x1-x2, y2-y1);
  12. rotate(a);
  13. line(0, 0, -10, -10);
  14. line(0, 0, 10, -10);
  15. popMatrix();
  16.  
  17. text(vecToString(new PVector(x1, x2)), x2, y2);
  18. }
  19. String vecToString(PVector v){
  20. return "(" + v.x + ", " + v.y + ")";
  21. }
  22. // Klasa za loptu
  23. class Lopta{
  24. PVector polozaj; // Vektor polozaja
  25. float duzina0; // Pocetna duzina
  26. float duzina; // Trenutna duzina opruge
  27. float koef; // Koeficijent elasticnosti
  28. float masa; // Masa lopte, kao i precnik
  29. float alfa; // Ugao izmedju ravnoteznog i trenutnog polozaja
  30.  
  31. PVector opruznaSila; // Vektor opruzne sile
  32. PVector brzina; // Vektor brzine
  33. PVector ubrzanje; // Vektor ubrzanja
  34.  
  35. PVector gravitacija; // Gravitaciona sila
  36.  
  37. Lopta(float mas, float duz, float koeff){
  38. brzina = new PVector(0, 0); // Brzina je na pocetku 0
  39. ubrzanje = new PVector(0, 0); // Kao i ubrzanje
  40. masa = mas;
  41. duzina0 = duz;
  42. duzina = duzina0; // Trenutna duzina je jednaka pocetnoj
  43. polozaj = new PVector(0, duzina); // Vektor polozaja
  44. koef = koeff;
  45. alfa = 0; // Ugao je na pocetku 0
  46. opruznaSila = new PVector(0, 0); // U ravnoteznom polozaju ne deluje sila
  47. gravitacija = new PVector(0, 9);
  48. };
  49.  
  50. // Racuna i postavlja opruznu silu
  51. void izrOpruznuSilu(){
  52. if(duzina < duzina0){
  53. opruznaSila.set(0, 0);
  54. } else {
  55. //if(duzina < 330) {
  56. // x komponenta opruzne sile
  57. float ox = -koef*(duzina-duzina0)*sin(alfa);
  58. // y komponenta opruzne sile
  59. float oy = -koef*(duzina-duzina0)*cos(alfa);
  60.  
  61. opruznaSila.set(ox, oy);
  62. }
  63. }
  64.  
  65. // F-ja koja prikazuje klatno i jos par stvari
  66. void prikazi(){
  67. // Prikazivanje lopte
  68. stroke(0);
  69. fill(255, 255, 255, 100);
  70. ellipse(polozaj.x, polozaj.y, 5*masa, 5*masa);
  71.  
  72. // Prikazivanje opruge
  73. stroke(255, 0, 72);
  74. strokeWeight(2);
  75. line(0, 0, polozaj.x, polozaj.y);
  76.  
  77. // Iscrtavanje vektora brzine
  78. if(prikaziBrzinu){
  79. arrow(polozaj.x, polozaj.y, polozaj.x + brzina.x, polozaj.y + brzina.y, 0, 0, 255);
  80. }
  81.  
  82.  
  83. };
  84.  
  85. void prikaziHUD() {
  86. // Ispis ugla i duzine
  87. stroke(0);
  88. fill(0);
  89.  
  90. strokeWeight(2);
  91. text("Duzina: ", 100, 100);
  92. strokeWeight(1);
  93. text(duzina, 150, 100);
  94.  
  95. strokeWeight(2);
  96. text("Ugao: ", 250, 100);
  97. strokeWeight(1);
  98. text(degrees(alfa), 300, 100);
  99. }
  100.  
  101. void promeniUgao(){
  102. alfa = atan2(polozaj.x, polozaj.y);
  103. };
  104.  
  105. // Funkcija koja pomera klatno u novi polozaj,
  106. // racuna duzinu opruge u tom polozaju, ugao i
  107. // izracunava opruznu silu
  108. void pomeri(PVector novi){
  109. polozaj = novi;
  110. duzina = polozaj.mag();
  111. promeniUgao();
  112. izrOpruznuSilu();
  113. };
  114.  
  115. // Funkcija koja update-uje brzinu, polozaj i ubrzanje
  116. void update(float delta){
  117. // Dodajemo sile koje deluju na klatno
  118. primeniSilu(PVector.mult(gravitacija, masa));
  119. primeniSilu(opruznaSila);
  120. brzina.add(PVector.mult(ubrzanje, delta));
  121. pomeri(PVector.add(polozaj, PVector.mult(brzina, delta)));
  122.  
  123. ubrzanje.mult(0);
  124. }
  125.  
  126. void primeniSilu(PVector sila){
  127. ubrzanje.add(PVector.div(sila, masa));
  128. }
  129.  
  130. // Postavlja brzinu i ubrzanje na 0
  131. void resetuj() {
  132. ubrzanje.set(0, 0);
  133. brzina.set(0, 0);
  134. }
  135.  
  136. };
  137.  
  138. Lopta l; // Nasa lopta
  139. boolean prikaziBrzinu = false;
  140.  
  141.  
  142. void setup(){
  143. size(1024, 1000); // Dimenzije ekrana
  144. l = new Lopta(10, 300, 20);
  145. frameRate(1000);
  146. lastTime = millis();
  147.  
  148. };
  149.  
  150. int lastTime = 0;
  151. int delta = 0;
  152.  
  153. class Dugme{
  154. float xpos, ypos;
  155. float wd, ht;
  156. String caption;
  157. color c;
  158. boolean status;
  159. Dugme(float _xpos, float _ypos, float _wd, float _ht, String _caption){
  160. xpos = _xpos;
  161. ypos = _ypos;
  162. wd = _wd;
  163. ht = _ht;
  164. c = color(255, 255, 255);
  165. caption = _caption;
  166. status = false;
  167. }
  168.  
  169. void show(){
  170. fill(c);
  171. strokeWeight(0);
  172.  
  173. rect(xpos, ypos, wd, ht);
  174. fill(0);
  175. text(caption, xpos+5, ypos+15);
  176.  
  177. }
  178.  
  179. void toggleColor(){
  180. if(!status){
  181. c = color(255, 255, 255);
  182. }else{
  183. c = color(200, 255, 255);
  184. };
  185. }
  186.  
  187. boolean isClicked(float mX, float mY){
  188.  
  189. if(mX >= xpos && mX <= xpos+wd && mY>=ypos && mY <= ypos+ht){
  190. status = !status;
  191. toggleColor();
  192. return true;
  193. }
  194. return false;
  195. }
  196.  
  197. }
  198.  
  199. color w = 255;
  200. Dugme dajBrzinu = new Dugme(100, 120, 100, 20, "Vektor brzine");
  201. void draw(){
  202.  
  203. delta = millis() - lastTime;
  204.  
  205. // Postavljanje novog koordinatnog pocetka
  206. translate(width/2, height/2);
  207. background(200, 255, 255);
  208.  
  209. // Update-ujemo brzinu, polozaj i ubrzanje
  210. l.update(delta/100f);
  211. l.prikazi();
  212.  
  213. translate(-width/2, -height/2);
  214. l.prikaziHUD();
  215.  
  216. lastTime = millis();
  217.  
  218. dajBrzinu.show();
  219.  
  220. };
  221.  
  222. // Na klik misa se klatno postavlja u zeljeni polozaj
  223. void mouseClicked(){
  224.  
  225. if(dajBrzinu.isClicked(mouseX, mouseY)){
  226. prikaziBrzinu = !prikaziBrzinu;
  227. return;
  228. }
  229.  
  230. l.pomeri(new PVector(mouseX-width/2, mouseY-height/2));
  231. l.resetuj();
  232.  
  233.  
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement