Pull to refresh

Comments 22

визуализация для музыкального плеера

не нужна.
Ну это в образовательных целях. Иногда интересно понаблюдать за своим творением. Так же дела обстоят и с демосценой. Вроде и бесполезная штука, но опыта при разработке набираешься много.
UFO just landed and posted this here
Как-то странно он реагирует на музыку.
Теперь и на JS можно легко создавать визуализации, с помощью Web Audio API (пока только для Chrome).
Написал небольшой пример.
А можете пояснить, что считается в этих строках:
var originalN: Number = (radius / r - phi) / (Math.PI * 2.0);
var n: Number = Math.min(Math.floor(originalN), Math.ceil(originalN));
					
phi += n * Math.PI * 2.0;
					
var cx: Number = xcoord / (Math.cos(phi) / phi);
var cy: Number = ycoord / (Math.sin(phi) / phi);

?
На самом деле в исходном коде немного другие обозначения коэффициентов, для более понятных имен.
radius — это на самом деле коэффициент «a».

Так что:
originalN — это текущий виток спирали; (как я пришел к такому вычислению я уже не помню, но помню, что это было мучительно :))
n — можно заменить на Math.floor(originalN); это я что-то недосмотрел;
phi — угол который должен быть на определенном витке. Получается такая штука, здесь угол в 10 градусов не тоже самое, что угол в 370 градусов, т.к. угол еще используется в знаменателе вне тригонометрических функций.
cx, cy — из уравнения спирали это коэффициент «a».

В итоге ширина спирали основывается на разнице этих самых «a». Говоря проще, для каждой точки вычисляется спираль по заданному параметру «a» и если она «похожа» на спираль которая нам нужна, то мы в этой точке вычисляем смещение.
Заинтересовало вычисление витка спирали :)
radius — это максимальный радиус спирали?
Это некий коэффициент скорости расхождения спирали, в принципе он сопоставим с максимальным радиусом.
Тогда как можно было бы понять его геометрический смысл? Вы уже не помните общий ход рассуждений?
Считайте это коэффициентом масштабирования. При изменении этого коэффициента, спираль не меняет свою структуру.
Из вот этого предела:
image

и более наглядного рисунка:
image

видно, что спираль растет не вечно. Поэтому коэффициент «a» это по сути максимальная высота(по y) спирали, а значит и радиус за пределами которого, приращение угла очень быстро phi -> 0
Наверное, не суждено мне понять :(
Попытаюсь еще раз:
var r: Number = Math.sqrt(xcoord * xcoord + ycoord * ycoord);
если xcoord и ycoord — расстояние от центра до текущей точки по каждой из осей координат, то r — гипотенуза в прямоугольном треугольнике
Что скрывается под radius / r? Почему из этого вычитается угол?
Я же раньше писал, замените название radius на a. Я уже сам запутался.
a/r = phi это phi не равняется phi который считается для каждой точки
То есть в случае с radius/r мы получаем угловую координату самой спирали, а в случае расчета для конкретной точки — ее угловую координату. Осталось понять, как разность этих двух координат дает нам конкретный виток.
Я вспомнил, я считал витки сначала так:
(radius / r) / (Math.PI * 2.0);

но так получался резкий переход в 0 градусов и потом я почему-то решил отнимать phi, тогда то все и заработало
SecurityError: Error #2122: Нарушение изолированной среды: SoundMixer.computeSpectrum: dl.dropbox.com/u/80206417/habr_articles/visualization/swf/HalosCorona.swf не может осуществить доступ к cs1-25.userapi.com/d30/0251ad7fafb595.mp3. Необходим файл политики, но, когда были загружены эти мультимедийные данные, флаг checkPolicyFile не был установлен.
at flash.media::SoundMixer$/computeSpectrum()
at Main/ComputeMaxSpectrumValue()
at Main/Update()

А в остальном здорово 8)
Sign up to leave a comment.

Articles