我需要每个圆都有随机旋转,具体取决于“腐烂”值,如所附图片所示。旋转将仅执行一次,并且必须仅在“ 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();
}
}
答案 0 :(得分:1)
我修复了您的代码,并注释了我添加/调整的部分,如果您还有其他问题或您不太了解我的所作所为,请告诉我。 结果恰好是您要求的
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();
}
}
祝你好运!