Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

ネオンライト

/**
* neon lights
*
* @author aa_debdeb
* @date 2016/09/22
*/

ArrayList<Node> nodes;
ArrayList<Edge> edges;
color c;

void setup(){
  size(640, 640);
  mousePressed();
}

void mousePressed(){
  nodes = new ArrayList<Node>();
  float r = 200;
  float angStep = TWO_PI / 20;
  for(int i = 0; i < 20; i++){
    float angle = i * angStep;
    nodes.add(new Node(r * cos(angle), r * sin(angle)));
  }
  edges = new ArrayList<Edge>();
  int eNum = int(random(10, 70));
  while(edges.size() < eNum){
    Node node1 = nodes.get(int(random(nodes.size()))); 
    Node node2 = nodes.get(int(random(nodes.size()))); 
    if(node1 == node2){
      continue;
    }
    for(Edge e: edges){
      if((e.node1 == node1 && e.node2 == node2) || (e.node2 == node1 && e.node1 == node2)){
        continue;
      }
    }
    edges.add(new Edge(node1, node2));
  }
  c = color(random(255), random(255), random(255));
}

void draw(){
  background(0);
  translate(width / 2, height / 2);
  noStroke();
  fill(c);
  for(Node node: nodes){
    ellipse(node.loc.x, node.loc.y, 15, 15);
  }
  stroke(c);
  strokeWeight(8);
  for(Edge edge: edges){
    line(edge.node1.loc.x, edge.node1.loc.y, edge.node2.loc.x, edge.node2.loc.y); 
  }
  noStroke();
  fill(255);
  for(Node node: nodes){
    ellipse(node.loc.x, node.loc.y, 10, 10);
  }
  stroke(255);
  strokeWeight(4);
  for(Edge edge: edges){
    line(edge.node1.loc.x, edge.node1.loc.y, edge.node2.loc.x, edge.node2.loc.y); 
  }
}

class Node{
  
  PVector loc;
  
  Node(float x, float y){
    loc = new PVector(x, y);
  }
  
}

class Edge{

  Node node1, node2;
  
  Edge(Node _node1, Node _node2){
    node1 = _node1;
    node2 = _node2;
  }
  
}
f:id:aa_debdeb:20160919221457j:plain