Keepin' it Wheel Processing3 Code
- Rikka Ly 
- Aug 20, 2021
- 2 min read
Updated: Jul 25, 2023
I encourage you to run this code yourself to see the looping randomness of the emissions!

import java.util.*;
int wheelxPos = 1050;
int frame = 0;
float CO2x;
float CO2y;
float CO2size;
int spacing = 20;
int r;
int wheelSize = 30;
ArrayList<gas> gasParticles = new ArrayList<gas>();
static ArrayList<CO2> CO2emissions = new ArrayList<CO2>();
static ArrayList<Integer> Y = new ArrayList<Integer>();
void setup() {
  size(1000, 1000);
  gas g = new gas();
  gasParticles.add(g);
}
void draw() {
  frame++;
  background(255);
  noStroke();
  fill(0);
  circle(wheelxPos, 850, 200);
  fill(255);
  pushMatrix();
  translate(wheelxPos, 850);
  rotate(radians(r));
  circle(spacing, spacing, wheelSize);
  circle(-spacing, spacing, wheelSize);
  circle(spacing, -spacing, wheelSize);
  circle(-spacing, -spacing, wheelSize);
  
  pushMatrix();
  rotate(radians(45));
  circle(spacing, spacing, wheelSize);
  circle(-spacing, spacing, wheelSize);
  circle(spacing, -spacing, wheelSize);
  circle(-spacing, -spacing, wheelSize);
  popMatrix();
  popMatrix();
  circle(wheelxPos, 850, 50);
  CO2emission();
  System.out.println(frame);
  if (wheelxPos != 500 || frame > 650) {
    wheelxPos -= 5;
    r -= 2;
  }
  if (wheelxPos == 500) {
    gasRising();
    if ((frame % 25 == 0) && (frame < 500)) {
      gas g = new gas();
      gasParticles.add(g);
    }
  }
  if (wheelxPos < -550) {
    wheelxPos = 1050;
    gasParticles = new ArrayList<gas>();
    CO2emissions = new ArrayList<CO2>();
    Y = new ArrayList<Integer>();
    gas g = new gas();
    gasParticles.add(g);
    CO2y = 0;
    CO2size = 0;
    frame = 0;
  }
  
}
void gasRising() {
  for (int num = 0; num < gasParticles.size(); num++) {
    gasParticles.get(num).ascend();
    gasParticles.get(num).display();
    fill(255);
  pushMatrix();
  translate(wheelxPos, 850);
  rotate(radians(r));
  circle(spacing, spacing, wheelSize);
  circle(-spacing, spacing, wheelSize);
  circle(spacing, -spacing, wheelSize);
  circle(-spacing, -spacing, wheelSize);
  
  pushMatrix();
  rotate(radians(45));
  circle(spacing, spacing, wheelSize);
  circle(-spacing, spacing, wheelSize);
  circle(spacing, -spacing, wheelSize);
  circle(-spacing, -spacing, wheelSize);
  popMatrix();
  popMatrix();
  circle(wheelxPos, 850, 50);
    if (gasParticles.get(num).x < 0 || gasParticles.get(num).x > 1000 || gasParticles.get(num).y < 0) {
      gasParticles.remove(num);
      num--;
    }
  }
}
class CO2 {
  float x;
  float y;
  float size;
  float POPsize = random(10, 30);
  float pop = 0;
  float check = int( random(1, 10) );
  float transparency = 1;
  float dtrans = random(0.01, 0.00001);
  CO2(float x, float y, float  size) {
    this.x = x;
    this.y = y;
    this.size = size;
  }
  void display() {
      noStroke();
      float a = map(transparency, 0, 1, 0, 255);
      if(frame > random(650, 800)){
        transparency -= dtrans;
      }
      fill(0, 0, 0, a);
      if (frame < 620) {
        size += 2;
      }
      circle(x, y, size);
    
  }
}
void CO2emission() {
  for (int num = 0; num < CO2emissions.size(); num++) {
    CO2emissions.get(num).display();
  }
}
class gas{
  float x;
  float y;
  float size;
  float yspeed;
  float xspread = random(-4.5, 4.5);
  CO2 c;
  
  gas(){
    x = 500;
    y = 850;
    size = random(40, 70);
    yspeed = random(5, 6);
  }
  
  void ascend(){
    y = y - yspeed;
    x = x + random(-2, 2) + xspread;
  }
  
  void display(){
    noStroke();
    fill(0);
    circle(x, y, size);
    
    if(x < 0 || x > 1000 || y < 0){
      CO2 c = new CO2(x, y, size);
      a1.CO2emissions.add(c);
    }
  }
}

Comments