如何使用 FOR 循环在一个圆圈中创建圆圈(在处理中)
How can I use a FOR loop to create circles in a circle (in Processing)
我需要创建一个循环,它将 space 在 Processing 中均匀地围绕一个圆圈。
我知道我可以通过某种方式实现 FOR 循环。
我需要能够增加或减少这个圆圈周围的圆圈数量(通过按下按钮),但要保持它们相等 spaced.
我知道我需要将公式包含在 FOR 循环中以获取 X 轴和 Y 轴。公式:
being
X = R*cos(angle-90)+Y0
Y = R*sin(angle-90)+X0
我理解了FOR循环的三个参数;什么时候开始,什么时候结束,运行时有什么变化。
我看不到的是如何将公式实现到 FOR 循环中。
非常感谢
这是我的代码
void setup () {
size (600, 600);
background (255, 255, 255);
smooth ();
ellipse (width/2, height/2, 200, 200); // the guide circle. Not needed in final code.
}
void draw() {
for (int i = 0; i < 20; i ++) {
for (int j = 0; j < 20; j ++) {
ellipse (i *20, j * 20, 20, 20);
}
}
}
这段代码应该可以解决问题:
float incrementalAngle = 0.0;
void setup(){
size(600, 600);
smooth();
background(0);
ellipse(width/2, height/2, 200, 200);
drawCircles(20, 200);
}
void draw(){
}
void drawCircles(int circlesNumber, int bigCircleNumber){
float angle = incrementalAngle;
for(int i = 0; i < circlesNumber; i++){
ellipse(bigCircleNumber * cos(incrementalAngle) + height/2,
bigCircleNumber * sin(incrementalAngle) + width/2,
circlesNumber, circlesNumber);
incrementalAngle += TWO_PI / circlesNumber;
}
}
因此不需要第二个循环,您尝试引入的公式将位于椭圆的 X 和 Y 位置,通过计算角度、cos 和 sin,您可以获得结果你在找
现在剩下的就是通过在 mousePressed()
方法中单击并绘制该数量来获得所需的圆圈数。
希望这对你有用,如果你需要更多帮助,请给我打电话
问候
何塞.
感谢所有帮助过的人。
我设法做到了(与你略有不同 @Jose Gonzalez
int nbr_circles = 2;
void setup() {
size(600, 600);
smooth();
background(255);
}
void draw() {
background(255);
float cx = width/2.0;
float cy = height/2.0;
fill(0);
//float x, y; //
for (int i = 0; i < nbr_circles; i++)
{
float angle = i * TWO_PI / nbr_circles;
float x = cx + 110.0 * cos(angle);
float y = cy + 110.0 * sin(angle);
ellipse(x, y, 20, 20);
}
}
void mousePressed() {
if (mouseButton == LEFT) {
if (nbr_circles < 20)
nbr_circles = nbr_circles + 1;
} else if (mouseButton == RIGHT) {
if (nbr_circles > 2)
nbr_circles = nbr_circles - 1;
}
}
我需要创建一个循环,它将 space 在 Processing 中均匀地围绕一个圆圈。
我知道我可以通过某种方式实现 FOR 循环。
我需要能够增加或减少这个圆圈周围的圆圈数量(通过按下按钮),但要保持它们相等 spaced.
我知道我需要将公式包含在 FOR 循环中以获取 X 轴和 Y 轴。公式:
being
X = R*cos(angle-90)+Y0
Y = R*sin(angle-90)+X0
我理解了FOR循环的三个参数;什么时候开始,什么时候结束,运行时有什么变化。
我看不到的是如何将公式实现到 FOR 循环中。
非常感谢
这是我的代码
void setup () {
size (600, 600);
background (255, 255, 255);
smooth ();
ellipse (width/2, height/2, 200, 200); // the guide circle. Not needed in final code.
}
void draw() {
for (int i = 0; i < 20; i ++) {
for (int j = 0; j < 20; j ++) {
ellipse (i *20, j * 20, 20, 20);
}
}
}
这段代码应该可以解决问题:
float incrementalAngle = 0.0;
void setup(){
size(600, 600);
smooth();
background(0);
ellipse(width/2, height/2, 200, 200);
drawCircles(20, 200);
}
void draw(){
}
void drawCircles(int circlesNumber, int bigCircleNumber){
float angle = incrementalAngle;
for(int i = 0; i < circlesNumber; i++){
ellipse(bigCircleNumber * cos(incrementalAngle) + height/2,
bigCircleNumber * sin(incrementalAngle) + width/2,
circlesNumber, circlesNumber);
incrementalAngle += TWO_PI / circlesNumber;
}
}
因此不需要第二个循环,您尝试引入的公式将位于椭圆的 X 和 Y 位置,通过计算角度、cos 和 sin,您可以获得结果你在找
现在剩下的就是通过在 mousePressed()
方法中单击并绘制该数量来获得所需的圆圈数。
希望这对你有用,如果你需要更多帮助,请给我打电话
问候 何塞.
感谢所有帮助过的人。
我设法做到了(与你略有不同 @Jose Gonzalez
int nbr_circles = 2;
void setup() {
size(600, 600);
smooth();
background(255);
}
void draw() {
background(255);
float cx = width/2.0;
float cy = height/2.0;
fill(0);
//float x, y; //
for (int i = 0; i < nbr_circles; i++)
{
float angle = i * TWO_PI / nbr_circles;
float x = cx + 110.0 * cos(angle);
float y = cy + 110.0 * sin(angle);
ellipse(x, y, 20, 20);
}
}
void mousePressed() {
if (mouseButton == LEFT) {
if (nbr_circles < 20)
nbr_circles = nbr_circles + 1;
} else if (mouseButton == RIGHT) {
if (nbr_circles > 2)
nbr_circles = nbr_circles - 1;
}
}