- Файл
- История файлов
- Использование файла
- Глобальное использование файлов
GoldenSpiralLogarithmic_color_in.gif (450 × 450 пикселов, размер файла: 1,51 МБ, MIME - тип: изображение / GIF , петельный, 245 кадров, 4,9 с)
Эта схема была создана с MATLAB по Jahobr :
Matlab
функция GoldenSpiralLogarithmic () % исходный код для рисования анимации%% 2018-06-07 Джахобрfps = 50 ; nFrames = 245 ; xySize = 450 ; % размер gif в пикселях scaleReduction = 2 ; % уменьшение размера: добавляет антиалиасинг [ pathstr , fname ] = fileparts ( который ( mfilename )); % сохранить файлы под тем же именем и в месте расположения файла figHandle = цифра ( 2324455 ); clfaxesHandle = оси ; удерживать ( axesHandle , 'on' )set ( figHandle , 'Units' , 'pixel' ); set ( figHandle , 'position' , [ 1 1 xySize * scaleReduction xySize * scaleReduction ]); % большое начальное изображение для последующего сглаживания [xy width height] set ( figHandle , 'GraphicsSmoothing' , 'on' ) % требуется как минимум версия 2014b set ( axesHandle , 'position' , [ - 0,05 - 0,05 1,1 1,1 ]); % растянуть ось больше, чем на рисунке, простой способ избавиться от отметок [xy width height] ось ровная ; Drawow ; фи = ( 1 + sqrt ( 5 )) / 2 ; b = журнал ( фи ) / ( пи / 2 ); thetaXextreme = atan ( b ) + pi / 2 * ( 2 : - 2 : - 20 ); rXextreme = phi . ^ ( thetaXextreme * 2 / pi ); [ Xextreme , yXext ] = pol2cart ( thetaXextreme , rXextreme ); thetaYextreme = atan ( b ) + pi / 2 * ( 1 : - 2 : - 21 ); rYextreme = phi . ^ ( thetaYextreme * 2 / пи ); [ xYext , Yextreme ] = pol2cart ( thetaYextreme , rYextreme ); тета = пи / 2 * ( 3 : - 0,02 : - 20 ); % точек кривой г = фи . ^ ( тэта * 2 / пи ); % радиусов [ X , Y ] = pol2cart ( тета , г ); % декартовой системы координат для useColor = [ false true ] CLA ( axesHandle ); для m = 1 : numel ( Xextreme ) - 2 если useColor cmap = [ 0,0 0,0 0,0 ; ... 1 цвет спирали; чернить 0,3 0,3 0,3 ; ... 2 цвета края коробки; серый 1,0 0,8 0,8 ; ... 3 ящика-наполнителя; бледно-красный 1,0 1,0 0,7 ; ... 4 ящика-наполнителя; палевый 0,8 1,0 0,8 ; ... 5 коробок-наполнителей; бледно-зеленый 0,8 0,8 1,0 ]; % 6 наполнение коробки; бледно-синий cmap = round ( cmap . * 255 ) ./ 255 ; % округлить до uint8 позиций curVers = '_color' ; если Xextreme ( m ) < 0 colFilling = cmap ( 3 , :); % бледно-красный еще colFilling = cmap ( 4 , :); % палевый конец патч ([ Xextreme ( m ) Xextreme ( m ) Xextreme ( m + 2 ) Xextreme ( m + 2 ) Xextreme ( m )], ... [ Yextreme ( m + 1 ) Yextreme ( m ) Yextreme ( m ) Yextreme ( m + 1 ) Yextreme ( m + 1 )], ... colFilling , 'EdgeColor' , cmap ( 2 , :), 'Ширина линии' , 3 ) если Yextreme ( m ) < 0 colFilling = cmap ( 5 , :); % бледно-зеленый еще colFilling = cmap ( 6 , :); % бледно-синий конец патч ([ Xextreme ( m + 2 ) Xextreme ( m + 2 ) Xextreme ( m + 1 ) Xextreme ( m + 1 ) Xextreme ( m + 2 )], ... [ Yextreme ( m + 2 ) Yextreme ( m ) Yextreme ( m ) Yextreme ( m + 2 ) Yextreme ( m + 2 )], ... colFilling , 'EdgeColor' , cmap ( 2 , :), 'Ширина линии' , 3 ) еще cmap = [ 0,0 0,0 1,0 ; ... 1 цвет спирали; синий 0,0 0,0 0,0 ; ... 2 цвета края коробки; чернить 1.0 1.0 1.0 ]; % 3 наполнение коробки; белый cmap = round ( cmap . * 255 ) ./ 255 ; % округлить до uint8 позиций curVers = '' ; сюжет ([ Xextreme ( m ) Xextreme ( m ) Xextreme ( m + 2 ) Xextreme ( m + 2 ) Xextreme ( m )], ... [ Yextreme ( m + 1 ) Yextreme ( m ) Yextreme ( m ) Yextreme ( m + 1 ) Yextreme ( m + 1 )], ... '-' , 'цвет' , cmap ( 2 , :), 'Ширина линии' , 3 ) сюжет ([ Xextreme ( m + 2 ) Xextreme ( m + 2 ) Xextreme ( m + 1 ) Xextreme ( m + 1 ) Xextreme ( m + 2 )], ... [ Yextreme ( m + 2 ) Yextreme ( m ) Yextreme ( m ) Yextreme ( m + 2 ) Yextreme ( m + 2 )], ... '-' , 'цвет' , cmap ( 2 , :), 'Ширина линии' , 3 ) конец конец plot ( X , Y , '.-' , 'linewidth' , 5 , 'color' , cmap ( 1 , :), 'Markersize' , 5 * 3.4 ) % сюжетная спираль scale = linspace ( log ( - Xextreme ( 3 )), log ( - Xextreme ( 5 )), nFrames + 1 ); % начните с полностью покрытой области, увеличивайте масштаб до повторения scale = exp ( масштаб ); % логарифмической продажи масштаб = масштаб ( 1 : конец - 1 ); % обрезать сдвоенный кадр RGBimageStack = uint8 ( ones ( xySize * scaleReduction , xySize * scaleReduction , 3 , nFrames )); % выделить для iFrame = 1 : nFrames ось равна xlim ([ - масштаб ( iFrame ) масштаб ( iFrame )]) % масштаб ylim ([ - масштаб ( iFrame ) масштаб ( iFrame )]) % масштаб drawnow выставить ; % вызывает обновление графики и объектов пользовательского интерфейса со всеми ожидающими изменениями % сохранить SVG если iFrame == 1 % только один раз если ~ isempty ( который ( 'plot2svg' )) posSave = get ( figHandle , 'позиция' ); set ( figHandle , 'position' , [ 1 1 800 800 ]); % большое начальное изображение для последующего сглаживания [xy width height] plot2svg ( fullfile ( pathstr , [ fname curVers '.svg' ]), figHandle ) %, автор: Юрг Швайцер. set ( figHandle , 'position' , posSave ); % сбросить размер set ( axesHandle , 'position' , [ - 0,05 - 0,05 1,1 1,1 ]); % растянуть ось больше, чем на рисунке, простой способ избавиться от отметок [xy width height] еще disp ( 'plot2svg.m недоступен; см. http://www.zhinst.com/blogs/schwizer/' ); конец конец %% сохранить анимацию f = getframe ( figHandle ); RGBimageStack (:,:,:, iFrame ) = f . cdata ; % хранить конец уменьшенныйRGBimage = imReduceSize ( RGBimageStack , scaleReduction ); % уменьшение размера: добавляет лучшее сглаживание map = createImMap ( уменьшенныйRGBimage , 32 , cmap ); % цветовая карта im = uint8 ( единицы ( xySize , xySize , 1 , nFrames )); % выделить изображение с индексом цветовой карты для iFrame = 1 : nFrames im (:,:, 1 , iFrame ) = rgb2ind ( уменьшенныйRGBimage (:,:,:, iFrame ), map , 'nodither' ); % RGB для цветовой карты индексированного изображения конец imwrite ( im , map , fullfile ( pathstr , [ fname curVers '_in.gif' ]), 'DelayTime' , 1 / fps , 'LoopCount' , inf ) % save gif disp ([ fname curVers '_in.gif имеет' num2str ( numel ( im ) / 10 ^ 6 , 4 ) 'Megapixels' ]) % Категория: Анимированные файлы GIF, превышающие ограничение в 50 МП imwrite ( im (:,:,:, iFrame : - 1 : 1 ), map , fullfile ( pathstr , [ fname curVers '_out.gif' ]), 'DelayTime' , 1 / fps , 'LoopCount' , inf ) % сохранить gif %% экономия MP4 и WebM cd ( pathstr ); % установить путь к рабочей папке videoFileName = [ Fname curVers '_in' ]; VID = VideoWriter ( videoFileName , 'MPEG-4' ); % Подготовить новый файл вид . FrameRate = fps ; вид . Качество = 100 ; % качества в [0% 100%] открытый ( видео ); для iRep = 1 : 5 % петель для iFrame = 1 : nFrames writeVideo ( vid , RGBimageStack (:,:,:, iFrame )); конец конец закрыть ( видео ); % disp ( 'преобразование из MP4 в WebM (в настоящее время Matlab не поддерживает webm)' ); пытаться dosCommand = [ '! ffmpeg -i' videoFileName '.mp4' ... % Команда и источник '-c: v libvpx-vp9 -crf 30 -b: v 0 -deadline best' ... % постоянное (наилучшее) качество; см .: https://trac.ffmpeg.org/wiki/Encode/VP9 videoFileName '.webm' ]; % целевой конверсии eval ( dosCommand ); % запустить преобразование из mp4 в webm ловить disp ([ '"ffmpeg.exe" недоступен в пути "' pathstr '" (или другая проблема); см. https://ffmpeg.zeranoe.com/builds/' ]); конецконецфункция im = imReduceSize ( im, redSize ) % Вход:% im: image, [imRows x imColumns x nChannel x nStack] (unit8)% imRows, imColumns: должно делиться на redSize% nChannel: обычно 3 (RGB) или 1 (серый)% nStack: количество сложенных изображений% обычно 1; > 1 для анимации% redSize: 2 = половина размера (четверть пикселей)% 3 = треть размера (девятая часть пикселей)% ... и так далее% Выход:% imNew: unit8 ([imRows / redSize x imColumns / redSize x nChannel x nStack])%% альтернативой является: imNew = imresize (im, 1 / reduceImage, 'билинейный');% НО "бикубический" и "билинейный" дает нечеткие линии% IMHO эта функция дает более хорошие результаты, поскольку "imresize" [ nRow , nCol , nChannel , nStack ] = размер ( im ); если redSize == 1 ; возврат ; конец % нечего делать если redSize ~ = round ( abs ( redSize )); error ( '"redSize" должен быть положительным целым числом' ); конец если rem ( nRow , redSize ) ~ = 0 ; error ( 'количество строк должно быть кратно redSize' ); конец если rem ( nCol , redSize ) ~ = 0 ; error ( 'количество пикселей-столбцов должно быть кратно "redSize"' ); конец nRowNew = nRow / redSize ; nColNew = nCol / redSize ; им = двойной ( им ) . ^ 2 ; % изменение масштаба яркости с "линейной на человеческий глаз" на "физическую область"; см. YouTube: / смотреть? v = LKnqECcg6Gw im = reshape ( im , nRow , redSize , nColNew * nChannel * nStack ); % пакетов шириной redSize, как столбцы рядом друг с другом im = сумма ( im , 2 ); % сумма во всех строках. Размер результата: [nRow, 1, nColNew * nChannel] im = перестановка ( im , [ 3 , 1 , 2 , 4 ]); % переместить одиночное измерение-2 в измерение-3; транспонировать изображение. Размер результата: [nColNew * nChannel, nRow, 1] im = reshape ( im , nColNew * nChannel * nStack , redSize , nRowNew ); % пакетов шириной redSize, как столбцы рядом друг с другом im = сумма ( im , 2 ); % сумма во всех строках. Размер результата: [nColNew * nChannel, 1, nRowNew] im = перестановка ( im , [ 3 , 1 , 2 , 4 ]); % переместить одноэлементное измерение-2 в измерение-3; транспонировать изображение обратно. Размер результата: [nRowNew, nColNew * nChannel, 1] im = reshape ( im , nRowNew , nColNew , nChannel , nStack ); % помещая все каналы (rgb) назад друг за другом в третьем измерении im = uint8 ( sqrt ( im ./ redSize ^ 2 )); % иметь в виду; перенормировать яркость: «линейная шкала для человеческого глаза»; назад в uint8 функция map = createImMap ( imRGB, nCol, startMap ) % createImMap создает цветовую карту, включающую предопределенные цвета.% "rgb2ind" создает карту, но нет возможности предопределить некоторые цвета,% и не обрабатывает сложенные изображения.% Вход:% imRGB: изображение, [imRows x imColumns x 3 (RGB) x nStack] (unit8)% nCol: общее количество цветов, которое должна иметь карта, [целое число]% startMap: предопределенные цвета; формат цветовой карты, [px 3] (двойной)imRGB = переставить ( imRGB , [ 1 2 4 3 ]); % шаг 1; сделать единое изображение-столбец (обработка возможного nStack) imRGBcolumn = Reshape ( imRGB , [], 1 , 3 , 1 ); % шаг 2; сделать единое изображение-столбец fullMap = double ( переставить ( imRGBcolumn , [ 1 3 2 ])) ./ 255 ; % "изображение столбца" к цветовой карте [ fullMap , ~ , imMapColumn ] = уникальный ( fullMap , 'строки' ); % найти все уникальные цвета; создать индексированное изображение цветовой карты % "cmunique" можно использовать, но он ошибочен и неудобен, потому что вывод изменяется между "uint8" и "double"nColFul = размер ( fullMap , 1 ); nColStart = размер ( startMap , 1 ); disp ([ 'Количество цветов:' num2str ( nColFul ) '(включая' num2str ( nColStart ) 'самостоятельно)' ]); если nCol <= nColStart ; error ( «Недостаточно цветов» ); конец если nCol > nColFul ; предупреждение ( «Больше цветов, чем нужно» ); конец isPreDefCol = false ( размер ( imMapColumn )); % в этом для iCol = 1 : nColStart diff = sum ( abs ( fullMap - repmat ( startMap ( iCol , :), nColFul , 1 )), 2 ); % разница между предустановленной и всеми расцветками [ mDiff , index ] = min ( diff ); % найти подходящий (или наиболее похожий) цвет если mDiff > 0,05 % обработка цвета неточная предупреждение ([ 'Предопределенный цвет' num2str ( iCol ) 'не отображается на изображении' ]) Продолжать конец isThisPreDefCol = imMapColumn == index ; % найти весь пиксель с предопределенным цветом disp ([ num2str ( sum ( isThisPreDefCol (:))) 'пиксель имеет предопределенный цвет' num2str ( iCol )]); isPreDefCol = или ( isPreDefCol , isThisPreDefCol ); % объединить с общим списком конец[ ~ , mapAdditional ] = rgb2ind ( imRGBcolumn ( ~ isPreDefCol ,:, :), nCol - nColStart , 'nodither' ); % создать карту оставшихся цветов карта = [ startMap ; mapAdditional ];
Лицензирование
Я, владелец авторских прав на это произведение, публикую его под следующей лицензией:
Этот файл доступен по лицензии Creative Commons CC0 1.0 Universal Public Domain Dedication . | |
Лицо, связавшее произведение с этим документом, посвятило произведение общественному достоянию , отказавшись от всех своих прав на произведение во всем мире в соответствии с законом об авторском праве, включая все смежные и смежные права, в той степени, в которой это разрешено законом. Вы можете копировать, изменять, распространять и выполнять работу даже в коммерческих целях, не спрашивая разрешения.
|
История файлов
Щелкните дату / время, чтобы просмотреть файл в том виде, в котором он был в то время.
Дата / время | Эскиз | Габаритные размеры | Пользователь | Комментарий | |
---|---|---|---|---|---|
Текущий | 19:47, 7 октябрь 2017 | 450 × 450 (1,51 МБ) | Джахобр | 'GraphicsSmoothing', 'on' + обновление кода | |
22:15, 2 май 2017 | 450 × 450 (1,47 МБ) | Джахобр | Страница, созданная пользователем с помощью UploadWizard |
Использование файла
Следующие страницы английской Википедии используют этот файл (страницы других проектов не указаны):
- Золотая спираль
- Пользователь: Glosome / Fine Animations
Глобальное использование файлов
Следующие другие вики используют этот файл:
- Использование на ckb.wikipedia.org
- لوولپێچی زێڕین
- Использование на en.wiktionary.org
- золотая спираль
- Использование на es.wikipedia.org
- Эспираль дорада
- Использование на gl.wikipedia.org
- Espiral dourada
- Использование на sl.wikipedia.org
- Злата спирала
- Использование на uk.wikipedia.org
- Золота спіраль
- Шаблон: Graphic-design2019-week-new
- Шаблон: Graphic-design2019-week-better
- Обговорення: Роб Яноф
- Обговорення: Паула Шер
- Обговорення: Ubuntu (шрифт)
- Обговорення шаблону: Шрифт
- Обговорення: Arial Unicode MS
- Обговорення: Lucida Sans Unicode
- Обговорення: Ніколя Дженсон
- Обговорення: Музей дизайну (Цюрих)