Processing 在平移处理后按定义的数量旋转每个圆
我需要每个圆有随机旋转取决于“旋转”值,如所附图片所示。旋转仅进行一次,且只能在“旋转”值定义的间隔内进行。任何帮助都将不胜感激 以下是我目前掌握的情况:Processing 在平移处理后按定义的数量旋转每个圆,processing,Processing,我需要每个圆有随机旋转取决于“旋转”值,如所附图片所示。旋转仅进行一次,且只能在“旋转”值定义的间隔内进行。任何帮助都将不胜感激 以下是我目前掌握的情况: int maxCircleDiameter=100, diameter, innerOffset; int numOfCirclesX, numOfCirclesY, xPos, yPos; int numOfRand = 4, rand, rot; void setup() { size(600, 600); //starti
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();
}
}
int maxCircleDiameter=100,直径,内偏移量;
int numOfCirclesX、numOfCirclesY、xPos、YPO;
int numorand=4,rand,rot;
无效设置(){
大小(600600);
//起始值
numOfCirclesX=宽度/最大圆直径;
NumoCircleSy=高度/最大圆直径;
innerOffset=maxCircleDiameter/numOfCirclesX;
}
作废提款(){
背景(255);
//随机值生成
randomRot();
//圈生成
显示圆();
//执行一次
noLoop();
}
void randomRot(){
兰德=(int)随机数(numfrand);
//rot值根据rand值而变化
开关(兰德){
案例0:
rot=-90;
打破
案例1:
rot=0;
打破
案例2:
rot=90;
打破
案例3:
rot=180;
打破
}
}
void displayCircles(){
for(int i=0;i内偏移);
popMatrix();
}
}
我修复了您的代码并对添加/调整的部分进行了注释,如果您有任何进一步的问题或您不太理解我所做的,请告诉我。
结果完全符合你的要求
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();
}
}
int maxCircleDiameter=100,直径,内偏移量;
int numOfCirclesX、numOfCirclesY、xPos、YPO;
无效设置(){
大小(600600);
//起始值
numOfCirclesX=宽度/最大圆直径;
NumoCircleSy=高度/最大圆直径;
innerOffset=maxCircleDiameter/numOfCirclesX;
}
作废提款(){
背景(255);
//随机值生成
randomRot();
//圈生成
显示圆();
//执行一次
noLoop();
}
float randomRot(){
int rand=(int)random(4);//我在这里固定了rand的数量,因为下面的开关是静态的,并且依赖于它
漂浮腐烂;
//rot值根据rand值而变化
开关(兰德){
案例0:
rot=0;
打破
案例1:
rot=PI/2;
打破
案例2:
rot=PI;
打破
违约:
rot=3*PI/2;
打破
}
返腐;
}
void displayCircles(){
for(int i=0;i内偏移);
popMatrix();
}
}
祝你好运