суббота, 4 мая 2024 г.

Почему это красиво? Странный эксперимент со спиралью Фибоначчи

В фотографии часто используется правило третей и золотое сечение - фраза буквально из статьи которая выдается первой по поиску в Яндексе. Есть подозрение, что не все фото делаются специально по этому правилу, но итоге почти все "красивые" фото оказываются соответствующими такому правилу, и человек просто любуется таким фото, не подозревая что любуется математикой. Мало того, любуясь фотографиями девушек, я обратил внимание, что и там часто присутствует такое же золотое сечение - женские формы и изгибы тела очень часто хорошо вписываются в золотую спираль. Смотрите сами:


Как видно изгиб тела практически идеально повторяет форму золотой спирали.

Я давно уже хотел проверить эти слова на практике, и для того чтобы быстро проверять "красоту" захотелось сделать онлайн инструмент, который рисовал бы золотую спираль поверх фотографии, и у меня это получилось.

Для начала нашел в интернете генератор спирали Фибоначчи на js: ответ на stackoverflow.com, где в конце автор ответа дал ссылку на JSFiddle, где можно погонять спираль и понять как она работает. Важно было сделать чтобы спираль рисовалась не из центра, но это решилось вставкой простой конструкции:

canvas.addEventListener("mousedown", function (e) {
    center.x = e.clientX;
    center.y = e.clientY;
}, false);

А для того чтобы спираль рисовалась поверх открытой вебстраницы, нужно добавить элемент canvas, который я сделал по размеру всего окна, и который скролится вместе с вебстраницей (свойство css position:sticky) и рисуется поверх других элементов (z-index:2000):
let el = document.getElementsByTagName("body")[0];
let canvas = document.createElement("canvas");
canvas.id = "can";
el.insertBefore(canvas, el.firstChild);
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.style.zIndex = "2000";
canvas.style.position = "sticky";
canvas.style.top = "0";
ctx = canvas.getContext("2d");
Чтобы сделать выход из режима рисования спирали, нужно добавить в код такую конструкцию:
document.addEventListener("keydown", function(){
    var x=event.key || event.code;
    if(x=="Escape"){
canvas.remove();
    }
})  
Потом весь код копируется и минимизируется, например при помощи сервиса https://jsminify.org/
Минимизированный код теперь можно поместить в букмарклет, который можно сгенерировать у меня на сайте. А можно воспользоваться уже готовой ссылкой: fibo. Эту ссылку можно добавить на панель ссылок и если увидел фото, красивой девушки, то всегда можешь проверить ее фигуру на золотое сечение. 

Букмарклет работает не плохо, хотя и есть несколько нареканий - например нельзя переворачивать спирать, иногда так было бы удобнее, плюс еще заметил что размер спирали ограничивается, если рисовать ее в левой части канваса. 

В общем-то на этом и все о чем хотелось бы рассказать. В конце вот еще немного красивого:

Потренироваться накладывать спиральки можно и тут, например.

ЗЫ а можно и на кошках тренироваться)

1 комментарий:

  1. https://triptonkosti.ru/4-foto/zolotaya-spiral-v-kartinah-94-foto.html

    ОтветитьУдалить