Processing:Примеры/Дерево: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Processing панель перехода}} | {{Processing панель перехода}} | ||
{{Перевод от Сubewriter}} | {{Перевод от Сubewriter}} | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Описание<ref>[https://processing.org/examples/tree.html processing.org - Recursive Tree by Daniel Shiffman.]</ref>= | =Описание<ref>[https://processing.org/examples/tree.html processing.org - Recursive Tree by Daniel Shiffman.]</ref>= | ||
Строка 78: | Строка 75: | ||
}} | }} | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
float theta; | float theta; | ||
Строка 140: | Строка 137: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Processing}} | |||
{{Навигационная таблица/ | |||
Текущая версия от 08:00, 27 августа 2023
Содержание | Среда разработки Processing | Справочник языка Processing | Библиотеки | Примеры | Режимы программирования |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Описание[1]
Этот скетч-пример при помощи рекурсии рендерит древоподобную структуру. Угол ветвления рассчитывается при помощи функции, в которой используется положение курсора на оси X.
Перемещайте курсор мышки влево-вправо, чтобы менять угол ветвления.
Пример
float theta;
void setup() {
size(640, 360);
}
void draw() {
background(0);
frameRate(30);
stroke(255);
// рассчитываем угол в диапазоне от 0 до 90 градусов
// на основе позиции курсора на оси X:
float a = (mouseX / (float) width) * 90f;
// конвертируем его в радианы:
theta = radians(a);
// начинаем дерево в нижней части экрана:
translate(width/2,height);
// рисуем линию длиной 120 пикселей:
line(0,0,0,-120);
// перемещаемся к концу этой линии:
translate(0,-120);
// запускаем рекурсивное ветвление!
branch(120);
}
void branch(float h) {
// каждая ветвь – это 2/3 от длины предыдущей ветви:
h *= 0.66;
// у всех рекурсивных функций должно быть условие выхода!!!!!
// в нашем случае этим условием будет,
// если длина ветви составляет 2 пикселя или меньше:
if (h > 2) {
pushMatrix(); // сохраняем текущее состояние трансформации
// (т.е. то, где мы находимся сейчас)
rotate(theta); // вращаем на угол «theta»
line(0, 0, 0, -h); // рисуем ветвь
translate(0, -h); // перемещаемся к концу ветви
branch(h); // окей, теперь вызываем сами себя,
// чтобы нарисовать две новые ветви!!!
popMatrix(); // каждый раз, добираясь сюда, возвращаем
// предыдущее состояние матрицы
// повторяем то же самое, только для ветвления «влево»:
pushMatrix();
rotate(-theta);
line(0, 0, 0, -h);
translate(0, -h);
branch(h);
popMatrix();
}
}
См.также
Внешние ссылки
Примеры на Processing | |
---|---|
Основы |
|
Продвинутые графические эффекты |
|
Примеры из сторонних библиотек |