Как сделать: за цикл + увеличение радиуса каждого цикла?

Как мне создать чистый и простой код, который создает круг точек/точек внутри большего? Или что-то подобное (я не могу выложить изображение того, что хочу, извините). Мне сказали попробовать использовать цикл for вокруг моего кода и слегка увеличивать радиус с каждой итерацией цикла. Однако я не знаю, как увеличить радиус?

Это код, с которым я экспериментировал до сих пор:

size (400, 400);
background(255);
noStroke();
fill(0);
smooth();
translate(width/2, height/2);

int numpoints = 10;
float angleinc = 2 * PI / numpoints;
int radius = 100;

for (int i = 0; i < numpoints; i++) {
  float x = cos(angleinc * i) * radius;
  float y = sin(angleinc * i) * radius;

  ellipse(x, y, 4, 4);
}

Пожалуйста, любая быстрая помощь будет оценена по достоинству. Кроме того, я новичок в обработке и кодировании, так что я не лучший...


person D Corrigan    schedule 30.08.2015    source источник
comment
Какое увеличение радиуса ожидается. Вы не можете просто добавить radius = radius*x, где x - увеличение цикла for   -  person Excel    schedule 30.08.2015
comment
Почему вы не можете разместить изображение того, что вы хотите? Просто смоделируйте это в краске. Все до сих пор гадают, чего вы хотите.   -  person Kevin Workman    schedule 31.08.2015


Ответы (3)


Вам повезет больше, если вы разобьете свою проблему на более мелкие шаги. Шаг первый — создание функции, которая рисует одно «кольцо» из меньших кругов. Вы уже сделали этот шаг, все, что вам нужно сделать, это выделить его в отдельную функцию:

void drawCircle(int outerRadius, int innerRadius) {

  int numpoints = 10;
  float angleinc = 2 * PI / numpoints;
  for (int i = 0; i < numpoints; i++) {
    float x = cos(angleinc * i) * outerRadius;
    float y = sin(angleinc * i) * outerRadius;

    ellipse(x, y, innerRadius, innerRadius);
  }
}

Затем, чтобы нарисовать набор колец увеличивающегося размера, вы просто вызываете функцию несколько раз:

  drawCircle(50, 8);
  drawCircle(75, 12);
  drawCircle(100, 16);

Который вы можете сжать в for loop:

  for(int i = 2; i <= 4; i++){
    drawCircle(25*i, 4*i);
  }

Все это будет выглядеть примерно так:

void setup() {
  size (400, 400);
}

void draw() {
  background(255);
  noStroke();
  fill(0);
  smooth();
  translate(width/2, height/2);

  for(int i = 2; i <= 4; i++){
    drawCircle(25*i, 4*i);
  }
}

void drawCircle(int outerRadius, int innerRadius) {

  int numpoints = 10;
  float angleinc = 2 * PI / numpoints;
  for (int i = 0; i < numpoints; i++) {
    float x = cos(angleinc * i) * outerRadius;
    float y = sin(angleinc * i) * outerRadius;

    ellipse(x, y, innerRadius, innerRadius);
  }
}

Это всего лишь пример, и вам придется поиграть с цифрами, чтобы все выглядело именно так, как вы хотите, но процесс тот же: разбейте вашу проблему на более мелкие шаги, изолируйте эти шаги в функциях, которые выполняют одну задачу. вещь, а затем вызывать эти функции для достижения вашей общей цели.

person Kevin Workman    schedule 30.08.2015

Надеюсь, я правильно понял ваш вопрос. Формула окружности вокруг начала координат: x=Rcos(угол) y=Rsin(угол), где угол находится в диапазоне от 0 до 2*pi.

если вы хотите нарисовать окружность вокруг точки, скажем, вокруг (x',y'), формула будет следующей: x= x' + Rcos(угол) y= y' + rsin(угол )

Код:

  float epsilon = 0.0001f;
    float R = 5.5.f; 
    for (float angle = 0.0; angle < 2*PI; angle += epsilon ) {
        float x = x' + R*cos(angle);
        float y = y' + R*sin(angle);
        drawPoint(x,y);
        if( /*condition for changing the radius*/ )
        {
            R = R*2; // or any change you want to do for R
        }
    }
person aviyaChe    schedule 30.08.2015
comment
Для меня это не имеет особого смысла, авияЧе, я очень новичок в обработке. Кроме того, моя программа обработки сказала, что значения x и y неверны. Все, что я хочу сделать, это создать еще один набор точек внутри исходного набора, поэтому, как и в исходном круге точек, я хочу добавить еще один круг точек внутри меньшего размера, чем раньше, - максимально чистым способом, без создания многочисленных вложенных циклов. - person D Corrigan; 30.08.2015
comment
Это псевдокод, вам нужно объявить x' и y'. Вопрос не ясен, можно картинку добавить что ли? - person aviyaChe; 30.08.2015
comment
x' и y' отсутствовали в приведенных выше уравнениях. Это был недостающий элемент, который мне был нужен, чтобы заставить мои формулы работать. - person BrianLegg; 09.02.2019

Вероятно, проще всего использовать два цикла for: один цикл for рисует круг с определенным радиусом, а другой цикл for содержит предыдущий цикл for, который увеличивает радиус.

int numCircles = 3;

//This for loop increases the radius and draws the circle with another for loop
for (int j = 0; j < numCircles; j++)
{
  //This for loop draws the actual circle
  for (int i = 0; i < numpoints; i++)
  {
    float x = cos(angleinc * i) * radius;
    float y = sin(angleinc * i) * radius;

    ellipse(x, y, 4, 4);
  }
  //(add code here that increases the radius)
}
person colouredmirrorball    schedule 30.08.2015