debxyz
1
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
float rad = radians(deg); // convert to radians
void setup() {
size(400, 400);
//______________________??? I should somehow initialize the array list here ???
grays [0] = #FFFFFF; // kind of lost here
grays [1] = #BEBEBE;
grays [2] = #7F7F7F;
grays [3] = #3F3F3F;
grays [4] = #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) {
rotate (rad);
} else if (r > 0.40 && r < 0.50) {
rotate (rad*3);
} else if (r > 0.50 && r < 0.65) {
rotate (rad*2);
} else {
rotate (rad*4);
}
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
glv
3
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
debxyz
4
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 [5];
in setup() :
grays [0] = #FFFFFF;
grays [1] = #BEBEBE;
grays [2] = #7F7F7F;
grays [3] = #3F3F3F;
grays [4] = #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
float rad = radians(deg); // convert to radians
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) {
rotate (rad);
} else if (r > 0.40 && r < 0.50) {
rotate (rad*3);
} else if (r > 0.50 && r < 0.65) {
rotate (rad*2);
} else {
rotate (rad*4);
}
// 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
debxyz
6
This works nicely! Thank you again.

debxyz
7
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
debxyz
8
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
debxyz
11
Ah yes, that makes much more sense regarding the modulo. Thank you!

glv
12
Hello,
It is only part of the frameRate counter.
Reference:
Lots of uses for modulo:
Make modulo your friend! Concepts can be adapted for Processing.
And further on the subject:
:)
4 Likes
debxyz
13
Thanks for this interesting link! Much appreciated. 