Sergei Sokolov (chaka) wrote,
Sergei Sokolov
chaka

Перспектива

treees
Баловство 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);
  }
}
Tags: illustrations, processing
Subscribe

  • Сити и Терек

    На два месяца мы в Куала Лумпуре. Из нашего окна на 17-м этаже прекрасный вид на центр города: близнецы Петронас, телебашню и "лицо" города,…

  • Весна, петухи и кот без хвоста

    Хвост Ксена обнаружила, когда мы вышли на крыльцо нашего дома. Судя по размеру и окраске, хвост ранее принадлежал крупному гекону Токаи, как раз…

  • Начало 12

    Хотел написать немного, но, после длительного молчания, пост вышел тоже некороткий. Год начался фейерверками и петардами на берегу острова,…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments