Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ArrayList<Circle> circles = new ArrayList<Circle>();
- int edge = 0, rmin = 10, rmax = 50;
- float r = 0, max = 100;
- void setup() {
- size(1080, 720);
- circles.add(new Circle(new PVector(width/2, height/2), 20, 0, new PVector(0, 0)));
- }
- void draw() {
- background(34);
- paintCircles();
- if (circles.size()<max) addCircle();
- }
- void paintCircles() {
- for (int i=0; i<circles.size(); i++) {
- Circle pc;
- Circle nc;
- Circle c = circles.get(i);
- noFill();
- //stroke(255, 200);
- //fill(255, 100, 200, 150);
- //noStroke();
- strokeWeight(1);
- //ellipse(c.center.x, c.center.y, c.radius*2, c.radius*2);
- if (i>0) {
- pc = circles.get(i-1);
- //ine(pc.center.x, pc.center.y, c.center.x, c.center.y);
- //ellipse(c.in.x, c.in.y, 10, 10);
- }
- if (i<circles.size()-1) {
- nc = circles.get(i+1);
- float angle_in = atan2(c.center.y-c.in.y, c.center.x-c.in.x);
- float angle_out = atan2(c.center.y-nc.in.y, c.center.x-nc.in.x);
- float ai = map(angle_in, -PI, PI, 0, TWO_PI);
- float ao = map(angle_out, -PI, PI, 0, TWO_PI);
- //if (ao < ai) ao += TWO_PI;
- strokeCap(SQUARE);
- //strokeWeight(map(c.radius, 10,50,2,15));
- strokeWeight(2);
- stroke(238);
- noFill();
- //fill(150,0,255,60);
- int num = (int) map(c.radius, rmin, rmax, 1, 5);
- for (int j=0; j<num; j++) {
- float rad = c.radius*map(j, 0, num, 2, 0.5);
- if (i%2==0) {
- if (ao < ai) ao += TWO_PI;
- arc(c.center.x, c.center.y, rad, rad, ai, ao);
- } else {
- if (ai < ao) ai += TWO_PI;
- arc(c.center.x, c.center.y, c.radius*2, c.radius*2, ao, ai);
- }
- }
- }
- }
- }
- void addCircle() {
- Circle c = circles.get(circles.size()-1);
- r = random(TWO_PI);
- float angle = random(-r, r);
- float radius = random(rmin, rmax);
- float x = c.center.x + cos(angle)*(radius+c.radius);
- float y = c.center.y + sin(angle)*(radius+c.radius);
- PVector v = new PVector(x, y);
- x = c.center.x + cos(angle)*c.radius;
- y = c.center.y + sin(angle)*c.radius;
- PVector in = new PVector(x, y);
- Circle nc = new Circle(v, radius, angle, in);
- if (checkCircles(nc)) {
- circles.add(nc);
- }
- }
- Boolean checkCircles(Circle c) {
- Boolean outside = true;
- for (int i=0; i<circles.size(); i++) {
- Circle cc = circles.get(i);
- if (c.center.dist(cc.center) < (c.radius + cc.radius)) {
- outside = false;
- return outside;
- }
- }
- return outside;
- }
- void mouseReleased() {
- addCircle();
- Circle c = circles.get(circles.size()-1);
- println(atan2(c.in.y-c.center.y, c.in.x-c.center.x ));
- println(circles.size());
- }
- void keyPressed() {
- if (key == 'n') {
- r = 0;
- circles = new ArrayList<Circle>();
- circles.add(new Circle(new PVector(width/2, height/2), 20, 0, new PVector(0, 0)));
- }
- if (key == 's') save(random(9999)+".png");
- }
- class Circle {
- PVector center;
- PVector in, out;
- float radius;
- float angle;
- Circle(PVector _center, float _radius, float _angle, PVector _in) {
- center = _center;
- radius = _radius;
- angle = _angle;
- in = _in;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement