So this is the code I wrote which I intend to draw n
lines starting from a single point. Each separated by an angle of 2*PI / n
.
int n;
void setup(){
size(displayWidth, displayHeight);
n = 7;
}
void draw(){
background(0);
push();
translate(displayWidth/2, displayHeight/2);
strokeWeight(4);
for (int i=0; i < n; i++){
stroke(random(255), random(255), random(255));
//println(i);
//println("theta is", i*(2*PI/n));
//println("theta in deg is", i*(2*PI/n)*180/PI);
rotate(i*(2*PI/n));
line(0, 0, 200 * 2, 0);
}
//noLoop();
pop();
}
void keyPressed(){
if (key == '='){
n++;
} else if (key == '-'){
n--;
if (n <= 0) n = 1;
}
}
It is wrong for some reason as it doesn’t work for n=3,5,6,7,9,10..
.
I mean it doesn’t work.
It is working only when n is 1,2,4,8,16,32...
i.e. only 2 multiples.
I must be doing something wrong. Any help appreciated.
Use -, =
keys to alter the spike count.
1 Like
@gotoloop can you help me?
Sorry, my trigonometry is almost nil.
So I replaced these lines with this
line(0, 0, 200 * 2 * cos(i*(2*PI/n)), 200 *2 * sin(i*(2*PI/n)));
i.e. normal polar coordinates (r*cos(a), r*sin(a))
And it works. Anyone knows why rotate
didn’t work?
Hello!
Please remember that rotate()
in the line rotate(i*(2*PI/n));
adds up the angles
So you have to use push
and pop
inside the for-loop to avoid the adding up:
(using + and - here)
int n = 7;
void setup() {
size(displayWidth, displayHeight);
}
void draw() {
background(0);
strokeWeight(4);
for (int i=1; i <= n; i++) {
stroke(random(255), random(255), random(255));
pushMatrix();
translate(displayWidth/2, displayHeight/2);
//println(i);
//println("theta is", i*(2*PI/n));
//println("theta in deg is", i*(2*PI/n)*180/PI);
rotate(i*(2*PI/n));
line(0, 0, 200 * 2, 0);
popMatrix();
}// for
//noLoop();
fill(255);
text(n, 33, 33);
}
void keyPressed() {
if (key == '+') {
n++;
} else if (key == '-') {
n--;
if (n <= 0) n = 1;
}
}
OR
you use the fact that rotate()
adds up the angles and then you just don’t multiply by i
you just rotate a step further inside the for loop
Chrisir
int n = 7;
void setup() {
size(displayWidth, displayHeight);
}
void draw() {
background(0);
strokeWeight(4);
pushMatrix();
translate(displayWidth/2, displayHeight/2);
for (int i=1; i <= n; i++) {
stroke(random(255), random(255), random(255));
rotate(2*PI/n); // !!!!
line(0, 0, 200 * 2, 0);
}// for
popMatrix();
fill(255);
text(n, 33, 33);
}
void keyPressed() {
if (key == '+') {
n++;
} else if (key == '-') {
n--;
if (n <= 0) n = 1;
}
}
5 Likes
Thank you very much. Now I understand. I thought I was doing push and pop in the loop all this time.
1 Like