From be14b27d6980fbabfd0e8ec7e7aa601d81dbe2b8 Mon Sep 17 00:00:00 2001 From: hellerve Date: Tue, 28 Nov 2017 15:17:54 +0100 Subject: [PATCH] a real ring --- ring/ring.pde | 65 ++++++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/ring/ring.pde b/ring/ring.pde index 0dadae0..ca1a291 100644 --- a/ring/ring.pde +++ b/ring/ring.pde @@ -1,5 +1,8 @@ import peasy.PeasyCam; +static int RING_SIZE = 500; +static int RING_WIDTH = 120; + class Leaf { PVector pos; boolean reached = false; @@ -69,7 +72,7 @@ class Tree { Tree() { makeTorus(); - Branch root = new Branch(new PVector(300, 0), new PVector(0, -1)); + Branch root = new Branch(new PVector(RING_SIZE, 0), new PVector(0, -1)); branches.add(root); Branch current = new Branch(root); @@ -81,17 +84,20 @@ class Tree { } void makeTorus() { - for (int i = 0; i < 200; i++) { + for (int i = 0; i < 350; i++) { for (int p = 0; p < 90; p++) { PVector pos = PVector.random3D(); - pos.mult(90); - pos.add(sin(i)*300, cos(i)*300); + pos.x = 0; + pos.y = 0; + pos.mult(RING_WIDTH); + pos.add(sin(i)*RING_SIZE, cos(i)*RING_SIZE); leaves.add(new Leaf(pos)); } } } boolean closeEnough(Branch b) { + int i = 0; for (Leaf l : leaves) { float d = PVector.dist(b.pos, l.pos); if (d < max_dist) return true; @@ -101,7 +107,8 @@ class Tree { void show() { //for (Leaf l : leaves) l.show(); - for (int i = 0; i < branches.size(); i++) { + int size = branches.size(); + for (int i = 0; i < size; i++) { Branch b = branches.get(i); if (b.parent != null) { strokeWeight(2); @@ -158,42 +165,12 @@ class Tree { } } } - - void fuse() { - ArrayList nonparents = new ArrayList(); - for (Branch b : branches) { - boolean isnonparent = true; - for (Branch ib : branches) { - if (ib.parent != null && ib.parent.equals(b)) { isnonparent = false; break; } - } - if (isnonparent) nonparents.add(b); - } - for (Branch b : nonparents) { - Branch closest = null; - float record = -1; - for (Branch ib : nonparents) { - if (ib.equals(b)) continue; - PVector dir = PVector.sub(ib.pos, b.pos); - float d = dir.mag(); - if (closest == null || d < record) { - closest = ib; - record = d; - } - } - if (closest != null) { - Branch n = new Branch(b); - n.pos = closest.pos.copy(); - branches.add(n); - } - } - } } Tree tree; float min_dist = 5; float max_dist = 20; -boolean fused = false; PeasyCam cam; @@ -203,10 +180,24 @@ void setup() { tree = new Tree(); } +void drawCircles() { + noFill(); + strokeWeight(4); + pushMatrix(); + translate(0, 0, RING_WIDTH); + ellipse(0, 0, RING_SIZE*2, RING_SIZE*2); + popMatrix(); + + pushMatrix(); + translate(0, 0, -RING_WIDTH); + ellipse(0, 0, RING_SIZE*2, RING_SIZE*2); + popMatrix(); +} + void draw() { background(255); stroke(0); tree.show(); - if (tree.leaves.size() > 10) tree.grow(); - else if (!fused) { tree.fuse(); fused = true; } + tree.grow(); + drawCircles(); } \ No newline at end of file