翻译后按定义的量旋转每个圆 - 处理
Rotating every circle by defined amount after translation -Processing
Final Result
我需要每个圆根据 "rot" 值进行随机旋转,如附图所示。旋转只会进行一次,并且只能在 "rot" 值定义的间隔内进行。任何帮助,将不胜感激。
这是我目前的情况:
int maxCircleDiameter=100, diameter, innerOffset;
int numOfCirclesX, numOfCirclesY, xPos, yPos;
int numOfRand = 4, rand, rot;
void setup() {
size(600, 600);
//starting values
numOfCirclesX = width/maxCircleDiameter;
numOfCirclesY = height/maxCircleDiameter;
innerOffset = maxCircleDiameter/numOfCirclesX;
}
void draw() {
background(255);
//random value generation
randomRot();
//circle generation
displayCircles();
//executes once
noLoop();
}
void randomRot() {
rand = (int)random(numOfRand);
//rot value changes depending of rand value
switch(rand) {
case 0:
rot = -90;
break;
case 1:
rot = 0;
break;
case 2:
rot = 90;
break;
case 3:
rot = 180;
break;
}
}
void displayCircles() {
for (int i=0; i < numOfCirclesX*numOfCirclesY; i++) {
//base diameter
diameter = maxCircleDiameter;
//circle coords
xPos = maxCircleDiameter/2 + (i%numOfCirclesX*maxCircleDiameter);
yPos = maxCircleDiameter/2 + (i/numOfCirclesX*maxCircleDiameter);
ellipse(xPos, yPos, diameter, diameter);
pushMatrix();
do {
ellipse(xPos, yPos, diameter, diameter);
//circle's center moves 7 pixels down
translate(0, 7);
//smaller diameter
diameter -=innerOffset;
} while (diameter > innerOffset);
popMatrix();
}
}
我修复了你的代码并评论了我 added/adjusted 的部分,如果你有任何进一步的问题或者你不明白我所做的,请告诉我。
结果完全符合您的要求
int maxCircleDiameter=100, diameter, innerOffset;
int numOfCirclesX, numOfCirclesY, xPos, yPos;
void setup() {
size(600, 600);
//starting values
numOfCirclesX = width/maxCircleDiameter;
numOfCirclesY = height/maxCircleDiameter;
innerOffset = maxCircleDiameter/numOfCirclesX;
}
void draw() {
background(255);
//random value generation
randomRot();
//circle generation
displayCircles();
//executes once
noLoop();
}
float randomRot() {
int rand = (int)random(4); //I fixed the number of rands here because the switch below is static and depends on it
float rot;
//rot value changes depending of rand value
switch(rand) {
case 0:
rot = 0;
break;
case 1:
rot = PI/2;
break;
case 2:
rot = PI;
break;
default:
rot = 3*PI/2;
break;
}
return rot;
}
void displayCircles() {
for (int i=0; i < numOfCirclesX*numOfCirclesY; i++) {
//base diameter
diameter = maxCircleDiameter;
//circle coords
xPos = maxCircleDiameter/2 + (i%numOfCirclesX*maxCircleDiameter);
yPos = maxCircleDiameter/2 + (i/numOfCirclesX*maxCircleDiameter);
ellipse(xPos, yPos, diameter, diameter);
pushMatrix();
//get a random angle to draw the circles on
float angle=randomRot();
do {
ellipse(xPos, yPos, diameter, diameter);
//circle's center moves 7 pixels to on of the 4 directions depending on the random value angle took
translate(7*cos(angle), 7*sin(angle));
//smaller diameter
diameter -=innerOffset;
} while (diameter > innerOffset);
popMatrix();
}
}
祝你好运!
Final Result
我需要每个圆根据 "rot" 值进行随机旋转,如附图所示。旋转只会进行一次,并且只能在 "rot" 值定义的间隔内进行。任何帮助,将不胜感激。
这是我目前的情况:
int maxCircleDiameter=100, diameter, innerOffset;
int numOfCirclesX, numOfCirclesY, xPos, yPos;
int numOfRand = 4, rand, rot;
void setup() {
size(600, 600);
//starting values
numOfCirclesX = width/maxCircleDiameter;
numOfCirclesY = height/maxCircleDiameter;
innerOffset = maxCircleDiameter/numOfCirclesX;
}
void draw() {
background(255);
//random value generation
randomRot();
//circle generation
displayCircles();
//executes once
noLoop();
}
void randomRot() {
rand = (int)random(numOfRand);
//rot value changes depending of rand value
switch(rand) {
case 0:
rot = -90;
break;
case 1:
rot = 0;
break;
case 2:
rot = 90;
break;
case 3:
rot = 180;
break;
}
}
void displayCircles() {
for (int i=0; i < numOfCirclesX*numOfCirclesY; i++) {
//base diameter
diameter = maxCircleDiameter;
//circle coords
xPos = maxCircleDiameter/2 + (i%numOfCirclesX*maxCircleDiameter);
yPos = maxCircleDiameter/2 + (i/numOfCirclesX*maxCircleDiameter);
ellipse(xPos, yPos, diameter, diameter);
pushMatrix();
do {
ellipse(xPos, yPos, diameter, diameter);
//circle's center moves 7 pixels down
translate(0, 7);
//smaller diameter
diameter -=innerOffset;
} while (diameter > innerOffset);
popMatrix();
}
}
我修复了你的代码并评论了我 added/adjusted 的部分,如果你有任何进一步的问题或者你不明白我所做的,请告诉我。 结果完全符合您的要求
int maxCircleDiameter=100, diameter, innerOffset;
int numOfCirclesX, numOfCirclesY, xPos, yPos;
void setup() {
size(600, 600);
//starting values
numOfCirclesX = width/maxCircleDiameter;
numOfCirclesY = height/maxCircleDiameter;
innerOffset = maxCircleDiameter/numOfCirclesX;
}
void draw() {
background(255);
//random value generation
randomRot();
//circle generation
displayCircles();
//executes once
noLoop();
}
float randomRot() {
int rand = (int)random(4); //I fixed the number of rands here because the switch below is static and depends on it
float rot;
//rot value changes depending of rand value
switch(rand) {
case 0:
rot = 0;
break;
case 1:
rot = PI/2;
break;
case 2:
rot = PI;
break;
default:
rot = 3*PI/2;
break;
}
return rot;
}
void displayCircles() {
for (int i=0; i < numOfCirclesX*numOfCirclesY; i++) {
//base diameter
diameter = maxCircleDiameter;
//circle coords
xPos = maxCircleDiameter/2 + (i%numOfCirclesX*maxCircleDiameter);
yPos = maxCircleDiameter/2 + (i/numOfCirclesX*maxCircleDiameter);
ellipse(xPos, yPos, diameter, diameter);
pushMatrix();
//get a random angle to draw the circles on
float angle=randomRot();
do {
ellipse(xPos, yPos, diameter, diameter);
//circle's center moves 7 pixels to on of the 4 directions depending on the random value angle took
translate(7*cos(angle), 7*sin(angle));
//smaller diameter
diameter -=innerOffset;
} while (diameter > innerOffset);
popMatrix();
}
}
祝你好运!