
Баловство c Processing'ом. На этот раз рекурсивные функции: каждая палочка рисует две самих себя поменьше и потоньше, под углом туда и сюда. Ну ещё параметр перспективы, делающий цвет светлее и линии тоньше.
Этот вариант экспортирует картинку в векторе в PDF.
Каждый запуск программы даёт слегка разные результаты, т.к. используется шум Перлина для разнообразия веток.
import processing.pdf.*; void setup() { size(800, 270, PDF, "treees#.pdf"); background(212); smooth(); noLoop(); } void draw() { drawLine(650, 238, 15, 0.1, 8, 90); drawLine(580, 242, 25, -0.06, 10, 80); drawLine(130, 245, 25, 0.06, 10, 80); drawLine(280, 260, 50, 0.02, 10, 0); } void drawLine(float x, float y, float L, float azimuth, int level, int pers) // x,y - start point, L length, azimuth - direction, iteration number, perspective (0...100, 100 - farmost) { L *= 0.7+0.6*noise(x/2,y/2); azimuth *= 0.9+0.2*noise(x/2,y/2); float kLength = 0.8, kDist = 0.025, angle = PI/6; strokeWeight(level*(100-pers)/100); stroke(20+100*pers/100); line(x,y,x+L*sin(azimuth),y-L*cos(azimuth)); if(level > 1) { level = level - 1; float startX1 = x+L*sin(azimuth)+L*kDist*sin(azimuth+angle); float startY1 = y-L*cos(azimuth)-L*kDist*cos(azimuth+angle); float startX2 = x+L*sin(azimuth)+L*kDist*sin(azimuth-angle); float startY2 = y-L*cos(azimuth)-L*kDist*cos(azimuth-angle); drawLine(startX1, startY1, L*kLength, azimuth+angle, level, pers); drawLine(startX2, startY2, L*kLength, azimuth-angle, level, pers); } }