# Using defined colors from an array

I am trying to figure out how to access the 5 grays in the array randomly to fill() the arc shape and rectangle.

Seems like it should be pretty easy to do but…
And haven’t been able to find anything in my books or online that has worked yet.
I’ve commented next to problem areas.

Any hints / guidance most welcome!

``````// halfmoon motif
import processing.pdf.*;

boolean record;

color c1 = #FFFFFF;
color c2 = #BEBEBE;
color c3 = #7F7F7F;
color c4 = #3F3F3F;
color c5 = #000000;

color [] grays = {c1, c2, c3, c4, c5};

float deg = 90; // 90 degrees

void setup() {
size(400, 400);

//______________________??? I should somehow initialize the array list here ???
grays  = #FFFFFF;          // kind of lost here
grays  = #BEBEBE;
grays  = #7F7F7F;
grays  = #3F3F3F;
grays  = #000000;

//grays = new color (grays.length);
//for (int c = 0; c < grays.length; c++)
//______________________________???

frameRate(1);
}

void draw() {
if (record) {
beginRecord (PDF, "frame-####.pdf");
}

background (127);
noStroke();

float r = random(1);
println (r);

translate (200, 200);

if (r < 0.40) {
} else if (r > 0.40 && r < 0.50) {
} else if (r > 0.50 && r < 0.65) {
} else {
}

fill (int(random(grays))); // wrong, Would like a random selection from gray array list
rectMode (CENTER);
rect (0, 0, 200, 200);

fill (grays); // wrong, Would like a random selection from gray array list

arc (0, -100, 200, 200, 0, PI);

if (record) {
endRecord();
record = false;
}
}

void mousePressed() { // make PDF of current frame
record = true;
}
``````
1 Like

fill(grays[int(random(grays.length))]);

1 Like

Hello,

An example:

``````color c1 = #FFFFFF;
color c2 = #BEBEBE;
color c3 = #7F7F7F;
color c4 = #3F3F3F;
color c5 = #000000;

color [] grays = {c1, c2, c3, c4, c5};

int num = 0;

void setup()
{
size(500, 500);
}

void draw()
{
//background(0);
if (frameCount%60 == 0)
{
num = int(random(0, 5));
println(num, hex(grays[num]));
}
fill(grays[num]);
//println(hex(grays[num]));
circle(width/2, height/2, 300);
}
``````

`:)`

3 Likes

I’m going to try both approaches right now.
Thank you @Chrisir and @glv!!
Very much appreciated!! 1 Like

I should somehow initialize the array list here ??? // kind of lost here

there are different ways :

valid:

before setup() :

`color[] grays = new color ;`

in setup() :

``````  grays  = #FFFFFF;
grays  = #BEBEBE;
grays  = #7F7F7F;
grays  = #3F3F3F;
grays  = #000000;
``````

or like this

``````color[] grays = {
#FFFFFF,
#BEBEBE,
#7F7F7F,
#3F3F3F,
#000000
};
``````

Full Code

``````

color[] grays = {
#FFFFFF,
#BEBEBE,
#7F7F7F,
#3F3F3F,
#000000
};

float deg = 90; // 90 degrees

void setup() {
size(400, 400);
frameRate(1);
}

void draw() {

background (127);
noStroke();

float r = random(1);
// println (r);

translate (200, 200);

if (r < 0.40) {
} else if (r > 0.40 && r < 0.50) {
} else if (r > 0.50 && r < 0.65) {
} else {
}

// Would like a random selection from gray array list
int index = int(random(grays.length));
println(index);
fill(grays[index]);

// rect
rectMode (CENTER);
rect (0, 0, 200, 200);

arc (0, -100, 200, 200, 0, PI);
}
``````
2 Likes

This works nicely! Thank you again. This works nicely too! Quick question:

The “60” in this line. Is that chosen because it’s a multiple of 5 referring to the 5 elements in the array?

Or it could be any number? As frameCount%60 == 0 will equal “0” for the first 60 frames therefore,

will generate a random number 60 times?

Just want to make sure I understand what is happening under the hood.

1 Like

Good to know. That is part of my challenge. Not knowing which path is best to follow…

1 Like

if (frameCount%60 == 0) means:

• only when the modulo (remainder) of a division by 60 is 0, a new random number is produced.

So in frame 60, then 120, and so on.

So, approx. once per second only

2 Likes

identical:

``````  // Would like a random selection from gray array list
int index = int(random(grays.length));
println(index);
fill(grays[index]);
``````
2 Likes

Ah yes, that makes much more sense regarding the modulo. Thank you! Hello,

It is only part of the frameRate counter.

Reference:

Lots of uses for modulo:
`:)`
Thanks for this interesting link! Much appreciated. 