Blueprint
T

образ жизни • путешествия

15 апреля 2025

<script src="https://openprocessing.org/openprocessing_sketch.js"></script> <script src="https://cdn.jsdelivr.net/npm/p5@1.11.3/lib/p5.js"></script> <script> let offset = 0.02; let step = 5; let numWalkers = 5; let walkers = []; let lastClearTime; let COLORS = ['#F7ECDC','#F6A6B2' ,'#232CA8' , '#8F94CC', '#D93532']; class Walker { constructor() { this.xoff = random(1000); this.yoff = random(1000); this.x = random(width); this.y = random(height); this.w = windowWidth/30; // Color interpolation this.currentColor = color(random(COLORS)); this.targetColor = color(random(COLORS)); this.lerpAmt = 0; this.lerpSpeed = 0.02; // Bloom animation state this.lastBloom = millis(); this.bloomInterval = random(3000, 5000); this.isBlooming = false; this.bloomStart = 0; this.bloomDuration = 1000; this.bloomProgress = 0; // Relocation flag this.needsRelocation = false; } move() { // Handle relocation AFTER bloom if (this.needsRelocation) { this.x = random(width); this.y = random(height); this.needsRelocation = false; // reset flag // Optional: reset Perlin noise offset this.xoff = random(1000); this.yoff = random(1000); } // Normal random walk this.x += (noise(this.xoff) - 0.5) * step; this.y += (noise(this.yoff) - 0.5) * step; this.xoff += offset; this.yoff += offset; if (this.x < 0) { this.x = width; } if (this.x > width) { this.x = 0; } if (this.y < 0) { this.y = height; } if (this.y > height) { this.y = 0; } } updateColor() { let lerped = lerpColor(this.currentColor, this.targetColor, this.lerpAmt); this.lerpAmt += this.lerpSpeed; if (this.lerpAmt >= 1) { this.currentColor = this.targetColor; this.targetColor = color(random(COLORS)); this.lerpAmt = 0; } return lerped; } display() { let c = this.updateColor(); // interpolated color fill(c); let noiseSize = map(noise(this.yoff), 0, 1, 0.2, 0.7); circle(this.x, this.y, this.w * noiseSize); // Bloom trigger if (!this.isBlooming && millis() - this.lastBloom > this.bloomInterval) { this.isBlooming = true; this.bloomStart = millis(); this.bloomProgress = 0; } if (this.isBlooming) { this.lerpSpeed = 0.07; let elapsed = millis() - this.bloomStart; this.bloomProgress = constrain(elapsed / this.bloomDuration, 0, 1); // Use the same interpolated color for bloom this.bloom(c, this.bloomProgress); if (this.bloomProgress >= 1) { this.isBlooming = false; this.lastBloom = millis(); this.bloomInterval = random(3000, 6000); this.needsRelocation = true; this.lerpSpeed = 0.02; } } } bloom(baseColor, progress) { push(); translate(this.x, this.y); let numPetals = 10; let maxRadius = this.w * 1.0; let currentRadius = maxRadius * progress; let maxPetalWidth = this.w * 0.7; let maxPetalHeight = this.w * 0.35; let petalWidth = maxPetalWidth * progress; let petalHeight = maxPetalHeight * progress; let rotationOffset = random(TWO_PI); rotate(rotationOffset); for (let i = 0; i < numPetals; i++) { let angle = TWO_PI / numPetals * i; push(); rotate(angle); translate(currentRadius, 0); rotate(random(-PI / 10, PI / 10)); fill(baseColor); ellipse(0, 0, petalWidth, petalHeight); pop(); } pop(); } } function setup() { let codeElement = document.getElementsByName("code")[0]; let w = codeElement.clientWidth; let h = codeElement.clientHeight; codeElement.innerHTML = ''; let canvas = createCanvas(w, h); canvas.parent(codeElement); noStroke(); for (let i = 0; i < numWalkers; i++) { walkers[i] = new Walker(); } lastClearTime = millis(); } function draw() { if (millis() - lastClearTime > 60000) { clear(); // Clears everything drawn to the canvas lastClearTime = millis(); } for (let i = 0; i < numWalkers; i++) { walkers[i].move(); walkers[i].display(); } } </script>
{"points":[{"id":1,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":3,"properties":{"x":-500,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":2,"properties":{"duration":0.4,"delay":0,"bezier":[],"ease":"Power2.easeOut","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}
{"points":[{"id":4,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":6,"properties":{"x":-500,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":5,"properties":{"duration":0.4,"delay":0,"bezier":[],"ease":"Power2.easeOut","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}
{"points":[{"id":7,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":9,"properties":{"x":500,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":8,"properties":{"duration":0.4,"delay":0,"bezier":[],"ease":"Power2.easeOut","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}
{"points":[{"id":10,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":12,"properties":{"x":500,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":11,"properties":{"duration":0.4,"delay":0,"bezier":[],"ease":"Power2.easeOut","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}
{"points":[{"id":13,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":15,"properties":{"x":0,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":14,"properties":{"duration":0.4,"delay":0.4,"bezier":[],"ease":"Power2.easeOut","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}

За 2024 год почти 100 тысяч российских туристов съездили в Японию, а в 2025-м СМИ даже писали про очереди в японские консульства в России. Специальный выпуск The Blueprint призван помочь вам сориентироваться в Стране восходящего солнца. Вместе с экспертами The Blueprint от директора музея современного искусства «Гараж» Антона Белова до арт-директора Ushatava Саши Колацка мы подготовили для вас семь маршрутов, которые подскажут, где есть лучшие суши, смотреть на искусство, закупаться вещами японских дизайнеров и набирать нес-тандартные сувениры с собой. Материалы будут добавляться каждый день — читайте и смело берите билеты в Токио, путеводитель у вас уже есть.

{"points":[{"id":1,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":3,"properties":{"x":0,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":2,"properties":{"duration":0.8,"delay":0,"bezier":[],"ease":"Power0.easeNone","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}

600 км
по Японии

на велосипеде из комиссионки

Фотоистория и отчаянные путевые заметки Леонида Сорокина

{"points":[{"id":1,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":3,"properties":{"x":0,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":2,"properties":{"duration":0.8,"delay":0,"bezier":[],"ease":"Power0.easeNone","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}

От буддийских 

памятников до самых красивых копий

Гид по необычным
японским музеям

{"points":[{"id":1,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":3,"properties":{"x":0,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":2,"properties":{"duration":0.8,"delay":0,"bezier":[],"ease":"Power0.easeNone","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}

От кайсеки до конбини

Рассказываем, где и что есть в Японии

{"points":[{"id":1,"properties":{"x":0,"y":0,"z":0,"opacity":0,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}},{"id":3,"properties":{"x":0,"y":0,"z":0,"opacity":1,"scaleX":1,"scaleY":1,"rotationX":0,"rotationY":0,"rotationZ":0}}],"steps":[{"id":2,"properties":{"duration":0.8,"delay":0,"bezier":[],"ease":"Power0.easeNone","automatic_duration":true}}],"transform_origin":{"x":0.5,"y":0.5}}

Остров кроликов,

атомный купол, и, конечно, сакура

Что посмотреть в Японии

Материалы еще будут добавляться, следите
за обновлениями

{"width":1200,"column_width":75,"columns_n":16,"gutter":0,"margin":0,"line":40}
false
767
1300
false
false
true
{"mode":"page","transition_type":"slide","transition_direction":"horizontal","transition_look":"belt","slides_form":{}}
{"css":".editor {font-family: tautz; font-size: 16px; font-weight: 200; line-height: 21px;}"}