xxxxxxxxxx
//Created by Arnav Mehta
//Initial set up of variables as well as predetermined color palette.
var grid = [];
var CircleRad = [];
var PalleteVal = [];
var ChangeVal = [];
var bg = "#f1e7de";
var Pallete = ["#343d3a", "#5fd0d4", "#efa93a", "#fd2e58"];
//This allows you to change the number of cirlces to be created on the canvas
var numOfCirc = 300;
function setup() {
createCanvas(0.95*windowHeight, 0.95*windowHeight);
background(100);
gridsetup();
CircleDraw();
noStroke();
}
function draw() {
CircleMove2();
background(bg);
for(var d = 0; d < grid.length; d++){
noStroke();
fill(PalleteVal[d]);
ellipse(grid[d].x, grid[d].y, 2*CircleRad[d]);
}
}
//If Enter is pressed, this function generates new locations for the various circles and recalculates the radiuses
//Uses similar functions to CircleDraw function
function keyPressed(){
if(keyCode === ENTER){
CircleDraw();
}
if(keyCode === RIGHT_ARROW){
}
}
function gridsetup() {
for(var a = 0; a < numOfCirc; a++){
grid.push(createVector(a,a));
CircleRad.push(a);
PalleteVal.push(Pallete[int(random(4))]);
ChangeVal.push(createVector(random(-1,1), random(-1,1)));
}
}
//This function creates the circles, by generating a random location and determining its radius
function CircleDraw() {
for(var v = 0; v < numOfCirc; v++){
var LocX = int(random(0.95*windowHeight));
var LocY = int(random(0.95*windowHeight));
var tested = false;
while(tested === false){
var HoldPoint = createVector(LocX,LocY);
var count = 0;
for(var o = 0; o < v; o++){
var check = (grid[o].dist(HoldPoint) - CircleRad[o]);
if(check <= 0){
count+=1;
}
}
if(count === 0){
tested = true;
}
else{
LocX = int(random(0.95*windowHeight));
LocY = int(random(0.95*windowHeight));
}
}
var numsArray = [LocX, LocY, abs(0.95*windowHeight - LocX), abs(0.95*windowHeight - LocY)];
var length = min(numsArray);
grid[v].x = LocX;
grid[v].y = LocY;
if(length > 100){
length = int(random(100));
}
CircleRad[v] = length;
// by checking its radius with the distance between 2 circles and the other circles radius,
//you can adjust the value to fit accordingly so no circles will intersect.
for(var i = 0; i < v; i++){
var test = abs(grid[i].dist(grid[v]) - CircleRad[i]);
if(test < CircleRad[v]){
CircleRad[v] = test;
}
}
}
background(bg);
for(var d = 0; d < grid.length; d++){
noStroke();
fill(PalleteVal[d]);
ellipse(grid[d].x, grid[d].y, 2*CircleRad[d]);
}
}
function CircleMove(){
var maxd = 0.95*windowHeight;
var c1 = createVector(0,0);
var c2 = createVector(0,maxd);
var c3 = createVector(maxd,0);
var c4 = createVector(maxd,maxd);
for(var s = 0; s < grid.length; s++){
var counter = 0;
var VecChange = createVector(random(-1,1), random(-1,1));
for(var t = 0; t < grid.length; t++){
var point = createVector(grid[s].x, grid[s].y);
if( s!= t){
var recheck = (point.add(VecChange).dist(grid[t]) - (CircleRad[t]+CircleRad[s]));
if(recheck <= 0){
counter+=1;
}
if(point.x < CircleRad[s] || point.y < CircleRad[s]){
counter+=1;
}
if(point.x + CircleRad[s] > maxd || point.y + CircleRad[s] > maxd){
counter+=1;
}
}
}
if(counter === 0){
grid[s].add(VecChange);
}
}
}
function CircleMove2(){
var maxd = 0.95*windowHeight;
var c1 = createVector(0,0);
var c2 = createVector(0,maxd);
var c3 = createVector(maxd,0);
var c4 = createVector(maxd,maxd);
for(var s = 0; s < grid.length; s++){
var counter = 0;
for(var t = 0; t < grid.length; t++){
var point = createVector(grid[s].x, grid[s].y);
if( s!= t){
var recheck = (point.add(ChangeVal[s]).dist(grid[t]) - (CircleRad[t]+CircleRad[s]));
if(recheck <= 0){
counter+=1;
}
if(point.x < CircleRad[s] || point.y < CircleRad[s]){
counter+=1;
}
if(point.x + CircleRad[s] > maxd || point.y + CircleRad[s] > maxd){
counter+=1;
}
}
}
if(counter === 0){
grid[s].add(ChangeVal[s]);
}
else{
ChangeVal[s] = createVector(random(-1,1), random(-1,1));
}
}
}