Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. ArrayList<Particle> ellipses = new ArrayList<Particle>(); // En lista som sparar alla partiklar i sketchen
  2.  
  3. void setup() {
  4. fullScreen();
  5. frameRate(30);
  6.  
  7. //Skapar partiklarna
  8. for (int i = 0; i < 500; i++) {
  9. float x = random(width); // x = slumpmässig bredd
  10. float y = random(height); // y = slumpmässig höjd
  11. ellipses.add(new Particle(x,y)); // Skapa en partikel vis x, y
  12. }
  13.  
  14. //Beräkna partiklar som ligger nära varandra (endast för prestandaförbättring)
  15. for (int i = 0; i < ellipses.size(); i++) {
  16. Particle ellipse = ellipses.get(i);
  17. ellipse.calcNear();
  18. }
  19. }
  20.  
  21. // Drawfunktionen
  22. void draw() {
  23. background(10); //Ny bakgrund för varje frame
  24. for (int i = 0; i < ellipses.size(); i++) { // Körs en gång för varje partikel (varje ellipse)
  25. Particle ellipse = ellipses.get(i); // Sparar ellipses med index i till variabeln ellipse
  26. ellipse.move(); // Flytta partikeln med movefunktionen (se nedan)
  27. ellipse.makeLine(); // Beräkna vilka andra partiklar som det ska dras en linje mellan
  28. ellipse.show(); // Slutlige så ritas ellipsen med funktionen show()
  29. }
  30. }
  31.  
  32. // Partikelklassen
  33. class Particle {
  34. // Den position där partikeln roterar runt
  35. public float xCenter; // Rotationspunkt x-led
  36. public float yCenter; // Rotationspunkt y-led
  37.  
  38. // Partikelns nuvarade position i dess omloppsbana
  39. public float xPos; // Position i x-led
  40. public float yPos; // Position i y-led
  41.  
  42. public float rot; // Partikelns nuvarande rotation i förhållande till centerpositionen
  43. public float rotSpeed; // Hastighet och rotation (varierar mellan partiklar)
  44.  
  45. public color c; // En färgvariabel för varje partikel
  46.  
  47. public ArrayList<Particle> near; // En variabel för att hålla koll på de partiklarana som ligger nära partikeln (för prestandaoptimering)
  48.  
  49. public Particle(float x, float y) { // Konstruktionsfunktion
  50. // xCenter och yCenter variablarna bestäms när partikeln skapas, se funktionen setup()
  51. this.xCenter = x;
  52. this.yCenter = y;
  53.  
  54. // Partikelns initiala rotation är lika med 0
  55. this.rot = 0;
  56.  
  57. // Partikeln får en slumpmässig rotationshastighet
  58. this.rotSpeed = random(-1,1);
  59.  
  60. // Definiering av near ArrayList
  61. this.near = new ArrayList<Particle>();
  62.  
  63. //Flyttar partikeln och ger den en färg enligt funktionerna nedan
  64. this.move();
  65. this.newColor();
  66. }
  67.  
  68. void calcNear() { // En funktion som optimiserar så att varje partikel endast kollar på närliggande partiklar
  69. for (int i = 0; i < ellipses.size(); i++) { // Körs en gång för varje partikel
  70. Particle testEllipse = ellipses.get(i); // Placerar partikeln som loopen går igenom i variabeln testEllipse
  71. if (testEllipse != this) { // Konstrollerar att den ellipse som programmet går igenom inte är sig själv
  72. if (dist(testEllipse.xCenter,testEllipse.yCenter,this.xCenter,this.yCenter) <= 200) {
  73. near.add(testEllipse); // Lägger till en partikel i ArrayList near
  74. }
  75. }
  76. }
  77. }
  78. void move() { // Funktion som flyttar en partikel
  79. // Partikelns x och y positioner flyttas enligt formeln
  80. this.xPos = this.xCenter + cos(this.rot) * 100;
  81. this.yPos = this.yCenter + sin(this.rot) * 100;
  82.  
  83. // Partikelns rotation ökar/minskar enligt formeln
  84. this.rot += 0.06 * this.rotSpeed;
  85. }
  86.  
  87. void show() { // Partikeln visas med funktionen
  88. fill(this.c,70); // Partikeln får färg från variabeln this.c med 80/255 opacitet
  89. noStroke();
  90. ellipse(this.xPos,this.yPos,4,4); // Ritar partikeln med x-positionen, y-positionen med storleken 4 px diameter
  91. }
  92.  
  93. void makeLine() { // Funktion för att skapa en linje mellan två partiklar
  94. for (int i = 0; i < near.size(); i++) { // Körs en gång för alla partiklar i närheten av partikeln
  95. Particle testEllipse = near.get(i); // Placerar partikeln som loopen går igenom i variabeln testEllipse
  96. if (testEllipse != this) { // Konstrollerar att den ellipse som programmet går igenom inte är sig själv
  97. // Ritar en linje mellan nuvarande partikel och testpartikeln endast om avståndet är mindre än 70 px
  98. if(dist(testEllipse.xPos,testEllipse.yPos,this.xPos,this.yPos) < 70) {
  99. stroke(this.c,60); // Ändrar färg på linjen
  100. line(testEllipse.xPos,testEllipse.yPos,this.xPos,this.yPos); // Ritar linjen
  101. this.c = testEllipse.c; // Partikeln får samma färg som testpartikeln
  102. }
  103. }
  104. }
  105. }
  106.  
  107. void newColor() { // Funktion som ger en slumpmässig färg till partikeln
  108. // En tredjedels chans att det blir vardera av dessa nedan
  109. float r = random(1);
  110. if (r < 0.33) { // 33% chans
  111. this.c = color(random(255),255,0);
  112. } else if (r >= 0.33 && r < 0.66) { // 33% chans
  113. this.c = color(0,random(255),255);
  114. } else { // 33% chans
  115. this.c = color(255,0,random(255));
  116. }
  117. }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement