Processing:Примеры/Суммарная синусоида
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Среда разработки Processing | Справочник языка Processing | Библиотеки | Примеры | Режимы программирования |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Черновик |
Описание[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);
}
}
См.также
Внешние ссылки
Примеры на Processing | |
---|---|
Основы |
|
Продвинутые графические эффекты |
|
Примеры из сторонних библиотек |