Processing:Примеры/Суммарная синусоида: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Myagkij переименовал страницу Processing:Примеры/Суммарная косинусоида в Processing:Примеры/Суммарная синусоида без оставления перенаправления)
 
Нет описания правки
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
{{Processing панель перехода}}
{{Processing панель перехода}}
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Описание<ref>[https://processing.org/examples/additivewave.html processing.org - Additive Wave by Daniel Shiffman]</ref>=
=Описание<ref>[https://processing.org/examples/additivewave.html processing.org - Additive Wave by Daniel Shiffman]</ref>=
Строка 86: Строка 83:
}}
}}


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
int xspacing = 8;  // как далеко должны находиться друг от друга  
int xspacing = 8;  // как далеко должны находиться друг от друга  
                     // эллипсы (по горизонтальной оси)
                     // эллипсы (по горизонтальной оси)
Строка 161: Строка 158:
<references />
<references />


{{SEO
{{Навигационная таблица/Портал/Processing}}
|Заголовок статьи=Processing: Суммарная синусоида(Дэниэл Шиффман) / Онлайн справочник - wikihandbk.com
|Ключевые слова=processing,Суммарная синусоида (Дэниэл Шиффман) ,Суммарная синусоида (Дэниэл Шиффман) в processing, пример Суммарная синусоида (Дэниэл Шиффман), пример Суммарная синусоида (Дэниэл Шиффман) в processing
|Описание статьи=
|Изображение статьи для Open Graph=
|Адрес страницы для schemaNewsArticle=<nowiki>http://wikihandbk.com/wiki/Processing:Примеры/Суммарная синусоида</nowiki>
|Изображение статьи для schemaNewsArticle=<nowiki></nowiki>
|Высота изображения статьи для schemaNewsArticle=
|Ширина изображения статьи для schemaNewsArticle=
|Дата публикации для schemaNewsArticle=2018-07-25
|Автор=Мякишев Е.А.
|Издатель=myagkij
|Логотип издателя для schemaNewsArticle=<nowiki>http://wikihandbk.com/ruwiki/images/6/61/Tech_geek_logo_1x.jpg</nowiki>
|Ширина логотипа издателя для schemaNewsArticle=60
|Высота логотипа издателя для schemaNewsArticle=45
}}
{{Навигационная таблица/Справочник языка Processing}}
{{Навигационная таблица/Processing/Примеры}}

Текущая версия от 07:42, 27 августа 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Описание[1]

Этот скетч создает более сложную синусоиду, суммируя несколько синусоид друг с другом.

Пример

int xspacing = 8;   // как далеко должны находиться друг от друга 
                    // эллипсы (по горизонтальной оси)
int w;              // ширина всей волны
int maxwaves = 4;   // общее количество суммируемых синусоид

float theta = 0.0;
float[] amplitude = new float[maxwaves];  // высота волны
float[] dx = new float[maxwaves];         // значение для увеличения X
                                          // (при помощи «period»
                                          // и «xspacing»)
float[] yvalues;   // массив для хранения данных о высоте волны 
                   // (не обязательно)

void setup() {
  size(640, 360);
  frameRate(30);
  colorMode(RGB, 255, 255, 255, 100);
  w = width + 16;

  for (int i = 0; i < maxwaves; i++) {
    amplitude[i] = random(10,30);
    float period = random(100,300); // количество пикселей 
                                    // между повторениями волны
    dx[i] = (TWO_PI / period) * xspacing;
  }

  yvalues = new float[w/xspacing];
}

void draw() {
  background(0);
  calcWave();
  renderWave();
}

void calcWave() {
  // увеличиваем значение «theta»
  // (отвечает за скорость, с которой будет изгибаться волна):
  theta += 0.02;

  // выставляем все значения высоты на «0»:
  for (int i = 0; i < yvalues.length; i++) {
    yvalues[i] = 0;
  }
 
  // суммируем значения, отвечающие за высоту волн:
  for (int j = 0; j < maxwaves; j++) {
    float x = theta;
    for (int i = 0; i < yvalues.length; i++) {
      // у всех остальных волн используем косинус вместо синуса:
      if (j % 2 == 0)  yvalues[i] += sin(x)*amplitude[j];
      else yvalues[i] += cos(x)*amplitude[j];
      x+=dx[j];
    }
  }
}

void renderWave() {
  // простой способ для отрисовки синусоиды при помощи эллипсов:
  noStroke();
  fill(255,50);
  ellipseMode(CENTER);
  for (int x = 0; x < yvalues.length; x++) {
    ellipse(x*xspacing,height/2+yvalues[x],16,16);
  }
}

См.также

Внешние ссылки