powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ну что... с пятницей чтоли
94 сообщений из 94, показаны все 4 страниц
Ну что... с пятницей чтоли
    #39871850
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пятничная экзотическая задачка.

Распечатать прямоугольник цифирками по спирали.

123654

Или
123894765

Реализация - чем экзотичнее - тем лучше. Brainfuck. Машина Тьюринга. Perl. Функциональщина.
Формула мат-лаба. Чистая функция или грязная. SQL-запрос. Конечные-бесконечне автоматы.
Корутины.

Вобщем проявите фантазию. Разумеется параметризация должна быть. 2х3 или 3х3....

Gogo кодить!!!

Самому отличившемуся - респект.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39871856
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже на эту тему задумывался :)

Предлагаю чуть упростить задачу: прямоугольник заменяем квадратом, а спираль закручиваем внутрь, т.е.
Код: plaintext
1.
2.
1 2 3
8 9 4
7 6 5

Так и код будет красивее и студентам списать не получится.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872015
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квадрат это слишком просто. Прямоугольник 7х3 - вот это вызов.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872018
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что будет сложного в 7:3 ? Или чем сложнее?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872030
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для квадрата размера N. На неком гипотетическом Logo.
выглядело бы так.

Код: sql
1.
2.
3.
4.
5.
Вперед N
Поворот вправо
....
N=N-1
И повтор.


Это будет просто закрашивание. А нам надо добавить еще учет количества.
Тоесть движение черепашки вперед - это еще и закрашивание сиквенсом.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872033
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавная штука есть Piet. Язык программирования где команды - это цветные квадраты. А растр - это суть исходник.

http://www.dangermouse.net/esoteric/piet/samples.html
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872142
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут подумал что можно попробовать решить другую задачу: имея размер квадрата и координаты ячейки рассчитать ее номер.

Каждый квадрат 2N-2 ячеек, где N размер стороны. Отсюда вычисляем первое число квадрата. Далее надо как-то получить N и на каком месте ячейка
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872164
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топике Тяпничная география
мы решали более интересную задачу. Обход плоскости по кривой Гилберта. Кривая интересна тем что расстояние между
соседними точками всегда 1 в абсолютном эквиваленте. И любые интервалы отложенные вдоль этой кривой всегда
представляют собой композицию квадратов. Причем минимальную. Я обратил внимание тогда что эту кривую часто
используют для графического изображения интервалов IP-blocks.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872167
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

тему топика вроде обсуждали уже тут:
https://www.sql.ru/forum/1118954-1/obhod-pryamougolnika-po-spirali-poisk-bolee-podhodyashhego-algoritma
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

Да это клон. Я создал. Как и обещал но с другим смыслом.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872185
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА что будет сложного в 7:3 ?
Положение числа 1. При раскрутке из центра.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872194
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а что мешает крутить из угла в центр, уменьшая номера клеток?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872200
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonРаспечатать прямоугольник цифирками по спирали. Никаких проблем, даже кодить неинтересно.
В обработке изображений алгоритм обхода называется цепным кодом Фримена.
Просто идем от верхней левой ячейки и ищем ближайшую пустую по- или против часовой.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872205
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПоложение числа 1. При раскрутке из центра. Строим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872210
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

там нет пустых и не пустых, они не отличаются.

Ну, типа, не спортивно царапать автомобили гвоздиком при подсчете )
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872214
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не думаю, что алгоритм Фримена поможет распечатать (именно распечатать, а не "обойти изображение") такую спираль
Код: plaintext
1.
2.
3.
4.
5.
6.
0   1   2   3   4   5   6
21  22  23  24  25  26  7
20  35  36  37  38  27  8
19  34  41  40  39  28  9
18  33  32  31  30  29  10
17  16  15  14  13  12  11


да и когда там как-то дохрена для студента
тут математикой надо решать
построчный перебор и заполнение каждой строки (вектора) с учётом границ, которые сужаются
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872215
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*когда = кода
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872218
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovтам нет пустых и не пустых, они не отличаются. Даже не знаю что сказать.
Не могу представить средство разработки в котором невозможно определить, была ли уже заполнена ячейка.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872221
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисAleksandr Sharahovтам нет пустых и не пустых, они не отличаются. Даже не знаю что сказать.
Не могу представить средство разработки в котором невозможно определить, была ли уже заполнена ячейка.
Функция которая не помнит состояние доски.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872222
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудухне думаю, что алгоритм Фримена поможет распечатать (именно распечатать, а не "обойти изображение") такую спираль
Код: plaintext
1.
2.
3.
4.
5.
6.
0   1   2   3   4   5   6
21  22  23  24  25  26  7
20  35  36  37  38  27  8
19  34  41  40  39  28  9
18  33  32  31  30  29  10
17  16  15  14  13  12  11


да и когда там как-то дохрена для студента тут математикой надо решать
построчный перебор и заполнение каждой строки (вектора) с учётом границ, которые сужаютсяЕсли сделать из центра спираль
(вместо 2-х на 3 цифры по горизонтали)
начиная с 0 и заканчивая 41,
то просто меняем очерёдность с 0 - 41 на 41 - 0.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872226
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухне думаю, что алгоритм Фримена поможет распечатать (именно распечатать, а не "обойти изображение") такую спираль А в чем проблема? Именно так она и построится.
Можно и без Фримена, просто вычеркивать заполненные строки/столбцы и менять направление обхода при завершении линмм
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872230
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usovто просто меняем очерёдность с 0 - 41 на 41 - 0.
и что это будет?
в одной строке всего 7 ячеек, а вы хотите 42 обходить туда-обратно
Соколинский БорисМожно и без Фримена, просто вычеркивать заполненные строки/столбцы и менять направление обхода при завершении линмм
затык в границах. Они живут своей жизнью. При этом ещё и сокращаются.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872231
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борисполудухне думаю, что алгоритм Фримена поможет распечатать (именно распечатать, а не "обойти изображение") такую спираль А в чем проблема? Именно так она и построится.
Можно и без Фримена, просто вычеркивать заполненные строки/столбцы и менять направление обхода при завершении линмм

Написать функцию f(m,n,i,j), которая при минимальных затратах памяти
возвращает номер присвоенный ячейке [i,j] в матрице m*n.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872235
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудухGennadiy Usovто просто меняем очерёдность с 0 - 41 на 41 - 0.
и что это будет?
в одной строке всего 7 ячеек, а вы хотите 42 обходить туда-обратноА если ещё раз взглянуть на картинку (где 42) и подумать.

И поставить вместо 41 - 0, вместо 40 - 1, ...., вместо 0 - 41.
Что получится?

То есть, обход из центра от 0 до 41, а потом меняются цифры в обратном порядке.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872236
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двумерная поверхность по форме напоминающая пирамидку.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872237
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А далее - обычный алгоритм:

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

Первая линейка может быть произвольной длины.

Если кому-то нужно сделать обратный порядок, то нет проблем.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872242
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше 1 раз увидеть
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постарайтесь быть оригинальнее.

Классическая имплементации обсуждается в родительском топике.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872257
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алгоритм:

Прямоугольник из 4-х точек: xmin и xmax, ymin и ymax
Для начальной линейки ymin = ymax

Работаем на плоскости.
Координаты очередной точки x, y

1 этап – x растёт от xmin.
Если x > xmax, то xmax +=1 и переходим на y

2 этап - y уменьшается от ymin
Если y < ymin, то ymin -=1 и переходим на x

3 этап - x уменьшается от xmax
Если x < xmin, то xmin -=1 и переходим на y

4 этап - y растёт от ymin
Если y > ymax, то ymax +=1 и переходим на x

Далее этап 1 и т.д.

Если x или y «останавливаются» на минимальных или максимальных значениях,
то получается прямоугольник.

Можно сделать и обратный обход.

Можно потом поменять порядок точек, чтобы попасть в "центр" прямоугольника.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872264
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПостарайтесь быть оригинальнее.Критерии? что такое экзотика?
Потому что, если "не помнит состояния доски", то что она помнит? свои ходы сал быть тоже не помнит, своё положение тоже не должна помнить. Мутная формулировка, сэр.

Или, например минимум, чево она помнит. Например только своё положение, но тогда заранее рассчитывается и зашивается в код. Для экзотики лично я сделал бы по Соколинскому, виток за витком, для экзотики можно с рекурсией, помнятся только текущие размеры прям-ка. Ну и направление во внутрьили наружу. Но время на это тратить неохота. Я бы понял бы ещё, если б это что-то моделировало ...
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872269
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вот как раз для экзотики начальную точку можно выбрать не угол и не центр. И даже не периметр.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872271
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Главное забыл:

для точки с координатами (x, y) ставится число, равное порядковому изменению значений (x, y).

Можно начинать с 0, можно начинать с 1.

Если нужно, потом переворачиваем всю цепочку чисел.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872272
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
соот-но, по окончании 3го этапа надо сдвигать границу ymin на +1
а по окончании 4го - все остальные границы на -/+1
maytonПостарайтесь быть оригинальнее.

Классическая имплементации обсуждается в родительском топике.
без математиков разве что проц грузить
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872273
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудухсоот-но, по окончании 3го этапа надо сдвигать границу ymin на +1
а по окончании 4го - все остальные границы на -/+1Попробуйте на простых числах и поймёте.

Поиск минимума - это уменьшение!

Каждый этап заканчивается только одним изменением, а не двумя.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872274
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
один здесь математик, и тот - Usov
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872275
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98один здесь математик, и тот - Usov
Остальные в школу не ходили? Математика тут уровня средней школы.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872276
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе для экзотики можно по мере прохождения удалять путь из массива. А выход по исключению)) Ну то есть полудух прав, гонять байты туда-сюда.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872277
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, я не про задачу, про программистов. Оч часто оказывается, что не не ходили.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872280
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До компа только добрался, немного размышлял на эту тему и пришел к выводу что обычные координаты {x,y} легко преобразуются в номер ячейки спирали. Функция попозже.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872285
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
программисту тут массив не нужен
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872287
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovпрограммисту тут массив не нужен
это если он yield-ами программирует.
Но задача вполне может быть сформулирована и в терминах перестановки элементов массива.
Так, чтобы при принятом в языке соглашении о "сначала строках" или "сначала столбцах",
переставленный массив "естественным образом" отобразился в прямоугольнике необходимым образом.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872289
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovпрограммисту тут массив не нуженВот-вот, проверяет пусть тестировщик.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872292
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Aleksandr Sharahovпрограммисту тут массив не нуженВот-вот, проверяет пусть тестировщик.

я имел в виду 21987669
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872294
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухсоот-но, по окончании 3го этапа надо сдвигать границу ymin на +1
а по окончании 4го - все остальные границы на -/+1
maytonПостарайтесь быть оригинальнее.

Классическая имплементации обсуждается в родительском топике.
без математиков разве что проц грузить
Ай.. ты просто не в курсе наших пятничных традиций...
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872298
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кста, вот ещё вариант реализации.
Ходы(ф-ции): шаг вправо-влево, шаг вниз-вверх
Входной массив: указатели на ф-цию в нужной послед-сти.

"бэктрекинг" перестановок, с выполнением условий правильности перест-ки. На 40 эл-тов я наверное не возьмусь.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872305
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovя имел в виду 21987669 Ну вот и реализуй, с поправкой на то, что после каждого ххода меняется нумерация (если конечно есть желание).

Кста, ещё 2-поточный вариант: 2 потока делают ходы (т.е. 2 ф-ции) поочерёдно. Но каждому надо проверять, правильный ли ход у "коллеги".
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872313
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Aleksandr Sharahovя имел в виду 21987669 Ну вот и реализуй, с поправкой на то, что после каждого ххода меняется нумерация (если конечно есть желание).

Кста, ещё 2-поточный вариант: 2 потока делают ходы (т.е. 2 ф-ции) поочерёдно. Но каждому надо проверять, правильный ли ход у "коллеги".

ну и реализовал несколькими способами в предыдущем топике )
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872315
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahovexp98пропущено...
Вот-вот, проверяет пусть тестировщик.

я имел в виду 21987669
это ж оверхед
правильно внутри ф-и делать цикл
вектор это те же переменные, вы же не предлагаете от переменных отказываться
maytonАй.. ты просто не в курсе наших пятничных традиций...
да в курсе я ваших пятничных страданий )
взять всё, да и... написать на STL!
чтобы .rotate(), .reverse(), sets, sorting и прочие heaps
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872317
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovНаписать функцию f(m,n,i,j), которая при минимальных затратах памяти
возвращает номер присвоенный ячейке [i,j] в матрице m*n. Можно и так.
1. Определяем номер слоя как мин. расстояние до границы.
2. Определяем грань (В П Н Л).
3. Тривиально считаем номер.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872329
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухAleksandr Sharahovя имел в виду 21987669
это ж оверхед
правильно внутри ф-и делать цикл

Зависит от задачи: если не нумеруем, а только считаем до нужной ячейки, то как раз не оверхед.
Кстати, там и циклы не нужны. Можно вывести формулу.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872335
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это не экзотично. "Мша и мудведь" интереснее.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872336
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если формулу можно вывести, то её место в макросе вообще )
я сразу сказал про математиков
а пока вы предлагаете каждой ячейке вызывать функцию.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872338
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухесли формулу можно вывести, то её место в макросе вообще )
я сразу сказал про математиков
а пока вы предлагаете каждой ячейке вызывать функцию.

которая считает по формуле
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.



Тематически связано с https://www.sql.ru/forum/1303834/tyapnichnaya-budushhaya-multipotochnost
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872376
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872384
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.Я не понял.

Со спиралью разобрались?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872386
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал преобразование обычных координат в спиральные
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
// Номер ячейки (x,y) на спирали в квадрате n*n
int spiral(int n, int x, int y) {
	// Квадрат на котором расположена ячейка
	int k = std::min(std::min(x, n-x+1), std::min(y, n-y+1)); // Начало квадрата
	int q = n + 2 - 2*k; // Размер стороны
	// Расстояние от начала квадрата
	int r = 0;
	if (y == k) {
		r = x - k + 1;
	} else if (x == k + q - 1) {
		r = y - k + q;
	} else if (y == k + q - 1) {
		r = k - x + q*3 - 2;
	} else {
		r = k - y + q*4 - 3;
	}
	return r + n*n - q*q;
}

// Вывод квадрата n*n
void print(int n) {
	for (int y = 1; y <= n; y++) {
		for (int x = 1; x <= n; x++) {
			printf("%3d", spiral(n, x, y));
		}
		printf("\n");
	}
}
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872389
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonДа что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.Я не понял.

Со спиралью разобрались?
Спираль не особо интересна IMHO.
Так... Для старта беседы.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872508
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переформатировал
как лучше?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
//##############################################################################
// Номер ячейки (x,y) на спирали в квадрате n*n
int spiral(int n, int x, int y)
{
    // Квадрат на котором расположена ячейка
    int k = min(min(x, n - x + 1), min(y, n - y + 1));  // Начало квадрата
    int q = n + 2 - 2 * k;                              // Размер стороны
    int r = 0;                                          // Расстояние от начала квадрата

    if          (y == k)                {r = x - k + 1;}
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}
    else                                {r = k - y + q * 4 - 3;}

    return r + n * n - q * q;
}
//##############################################################################
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872522
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудухпереформатировал
как лучше?
Код: plaintext
1.
2.
//##############################################################################
// Номер ячейки (x,y) на спирали в квадрате n*n

Это не интересно.

Нужен прямоугольник n * m. 21987713
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухпереформатировал
как лучше?
Код: plaintext
1.
2.
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}


Это ужасно. Оставь как было.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872547
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисСтроим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.
Отлично. Но при этом цифра 1 вместо центра внезапно оказывается у правого края матрицы.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872555
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСоколинский БорисСтроим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.
Отлично. Но при этом цифра 1 вместо центра внезапно оказывается у правого края матрицы.
Почему? Вместо 1,2,...,9 сделай 9,8,...,1. Количество чисел заранее известно n*m
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872660
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovЭто не интересно.

Нужен прямоугольник n * m. 21987713

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function z(x, y, xSize, ySize: integer): integer;
var
  d, t: integer;
begin;
  if (x<0) or (x>=xSize) or (y<0) or (y>=ySize) then Result:=-1
  else begin;
    d:=min(min(min(x,y),xSize-x-1),ySize-y-1);
    t:=xSize*ySize-(xSize-2*d)*(ySize-2*d);
    if d=y then Result:=t+x-d
    else if d=xSize-x-1 then Result:=t+y+xSize-3*d-1
    else if d=ySize-y-1 then Result:=t-x+2*xSize+ySize-5*d-3
    else Result:=t-y+2*xSize+2*ySize-7*d-4;
    end;
  end;
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872667
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Код: pascal
1.
  if (x<0) or (x>=xSize) or (y<0) or (y>=ySize) then Result:=-1


Можно проще проверить d >= 0
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872673
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

точно
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872871
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку ьайтон и Барон посчитали-таки пару доп. диапазонов для 2^2048 и 4096,
(моя оценка для них 140,79 и 17,605, что почти укладывается в дельту sqrt(Ln x), т.е. почти в одну сигму)
то и я подобрел, и отвлёкся от любимых движущихся самолётов и парашютистов.

На МЛ, не шедевр, конечно. Всё же непосредственное вычисление координат удобнее, нежели закраска по спирали. Так что не нужно экзотики. Тем не менее.
Исходник, конечно подводные камни были, закрыл заплатками
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
n= чччч; m= ааааа;
A= zeros(n,m); nc= floor(n/2); mc= floor(m/2); B= [1:n*m]; t=0; 
for k= 1:nc+1  
  hy= n-2*(k-1); hx= m-2*(k-1); 
  if n<=m
	if (2*nc < n) && (k==nc+1) %% нечётное
		A(k, k:end-k)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(k, 1+end-k)= B(t+1); t= t+1;
	end; 
	if 2*k <= n
		A(k, k:end-k)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(k:end-k, end-k+1)= B(t+1 : t+hy-1); t= t+hy-1; 
		A(end-k+1, end-k+1:-1:k+1)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(end-k+1:-1:k+1, k)= B(t+1 : t+hy-1); t= t+hy-1; 
	end; 
  else 
	if 2*k <= m  %% вертик-ный  прям-к
	    A(k, k:end-k)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(k:end-k, end-k+1)= B(t+1 : t+hy-1); t= t+hy-1; 
		A(end-k+1, end-k+1:-1:k+1)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(end-k+1:-1:k+1, k)= B(t+1 : t+hy-1); t= t+hy-1; 
	else  %% вертик-ный столб
	    hx= 2; 
	    if 2*mc < m  %% нечётное
		A(k, mc+1)= B(t+1 : t+hx-1); t= t+hx-1; 
		if 2*k <= n 
		    A(end-k+1, mc+1)= B(t+1 : t+hx-1); t= t+hx-1; 
	    	    if t >= n*m  break, end; 
	    	end; 
	    end; 
	end; 
  end; 
end; [k, t], A


Данные

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
n=5; m=9;
     1     2     3     4     5     6     7     8     9
    24    25    26    27    28    29    30    31    10
    23    40    41    42    43    44    45    32    11
    22    39    38    37    36    35    34    33    12
    21    20    19    18    17    16    15    14    13

n=9; m=5;
     1     2     3     4     5
    24    25    26    27     6
    23    40    41    28     7
    22    39    43    29     8
    21    38    45    30     9
    20    37    44    31    10
    19    36    42    32    11
    18    35    34    33    12
    17    16    15    14    13

n=7; m=6;
     1     2     3     4     5     6
    22    23    24    25    26     7
    21    36    37    38    27     8
    20    35    42    39    28     9
    19    34    41    40    29    10
    18    33    32    31    30    11
    17    16    15    14    13    12

n=6; m=7; 
     1     2     3     4     5     6     7
    22    23    24    25    26    27     8
    21    36    37    38    39    28     9
    20    35    42    41    40    29    10
    19    34    33    32    31    30    11
    18    17    16    15    14    13    12

n=5; m=10;
     1     2     3     4     5     6     7     8     9    10
    26    27    28    29    30    31    32    33    34    11
    25    44    45    46    47    48    49    50    35    12
    24    43    42    41    40    39    38    37    36    13
    23    22    21    20    19    18    17    16    15    14

n=10; m=5;
     1     2     3     4     5
    26    27    28    29     6
    25    44    45    30     7
    24    43    47    31     8
    23    42    49    32     9
    22    41    50    33    10
    21    40    48    34    11
    20    39    46    35    12
    19    38    37    36    13
    18    17    16    15    14

n=5; m=11;
     1     2     3     4     5     6     7     8     9    10    11
    28    29    30    31    32    33    34    35    36    37    12
    27    48    49    50    51    52    53    54    55    38    13
    26    47    46    45    44    43    42    41    40    39    14
    25    24    23    22    21    20    19    18    17    16    15

n=11; m=5;
     1     2     3     4     5
    28    29    30    31     6
    27    48    49    32     7
    26    47    51    33     8
    25    46    53    34     9
    24    45    55    35    10
    23    44    54    36    11
    22    43    52    37    12
    21    42    50    38    13
    20    41    40    39    14
    19    18    17    16    15

n=7; m=7;
     1     2     3     4     5     6     7
    24    25    26    27    28    29     8
    23    40    41    42    43    30     9
    22    39    48    49    44    31    10
    21    38    47    46    45    32    11
    20    37    36    35    34    33    12
    19    18    17    16    15    14    13

n=6; m=6;
     1     2     3     4     5     6
    20    21    22    23    24     7
    19    32    33    34    25     8
    18    31    36    35    26     9
    17    30    29    28    27    10
    16    15    14    13    12    11

n=6; m=8;
     1     2     3     4     5     6     7     8
    24    25    26    27    28    29    30     9
    23    40    41    42    43    44    31    10
    22    39    48    47    46    45    32    11
    21    38    37    36    35    34    33    12
    20    19    18    17    16    15    14    13

n=8; m=6;
     1     2     3     4     5     6
    24    25    26    27    28     7
    23    40    41    42    29     8
    22    39    48    43    30     9
    21    38    47    44    31    10
    20    37    46    45    32    11
    19    36    35    34    33    12
    18    17    16    15    14    13

n=6; m=10;
     1     2     3     4     5     6     7     8     9    10
    28    29    30    31    32    33    34    35    36    11
    27    48    49    50    51    52    53    54    37    12
    26    47    60    59    58    57    56    55    38    13
    25    46    45    44    43    42    41    40    39    14
    24    23    22    21    20    19    18    17    16    15

n=10; m=6;
     1     2     3     4     5     6
    28    29    30    31    32     7
    27    48    49    50    33     8
    26    47    60    51    34     9
    25    46    59    52    35    10
    24    45    58    53    36    11
    23    44    57    54    37    12
    22    43    56    55    38    13
    21    42    41    40    39    14
    20    19    18    17    16    15

n=7; m=3;
     1     2     3
    16    17     4
    15    19     5
    14    21     6
    13    20     7
    12    18     8
    11    10     9

n=3; m=7;
     1     2     3
    16    17     4
    15    19     5
    14    21     6
    13    20     7
    12    18     8
    11    10     9


n=3; m=3;
     1     2     3
     8     9     4
     7     6     5

n=3; m=1;
     1
     3
     2

n=1; m=3;
     1     2     3

n=1; m=4;
     1     2     3     4

n=2; m=2;
     1     2
     4     3

n=1; m=1;
     1

n=0; m=1000;
     Ты больной?..


...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872874
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл добавить. Спираль закручивается по часовой от угла А(1,1), при нечётности внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В примерах видно.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872875
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98, шикарно.

Спс.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872899
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98На МЛ, не шедевр, конечно. Всё же непосредственное вычисление координат удобнее, нежели закраска по спирали. Так что не нужно экзотики. Тем не менее.
Исходник, конечно подводные камни были, закрыл заплатками
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
n=9; m=5;
     1     2     3     4     5
    24    25    26    27     6
    23    40    41    28     7
    22    39    43    29     8
    21    38    45    30     9
    20    37    44    31    10
    19    36    42    32    11
    18    35    34    33    12
    17    16    15    14    13

А почему чехарда с цифрами под 40-45?

Подгонка?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872906
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь объяснено.
exp98внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В даном случае столб [41 43 45 44 42]'.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872910
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Здесь объяснено.
exp98внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В даном случае столб [41 43 45 44 42]'.То что "верх-низ. верх-низ" к математике мало имеет отношение.
Это несколько иное.

Чехарда невозможна.

По условию задачи должно быть плавное заполнение последнего участка.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872976
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov, это не чехарда, это, сказано выше уже, псевдоспираль.
Я не читал про плавное заполнение, очень нужно если, возьми вторую половину проги (после else ), и переделай в ней вторую половину сам. Потом напишешь статью про плавное заполнение вертикальных участков.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872990
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Gennadiy Usov, это не чехарда, это, сказано выше уже, псевдоспираль.
Я не читал про плавное заполнение, очень нужно если, возьми вторую половину проги (после else ), и переделай в ней вторую половину сам. Потом напишешь статью про плавное заполнение вертикальных участков.Почему горизонтальный участок заполняется нормально,
а вертикальный участок заполняется через Ж(вверх-вниз)?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873024
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov, здесь объяснено В случае возникновения вопросов см. данный пост.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873169
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант проще, без экзотики.
Исходник
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
%% по спирали, начиная с А(1,1), по часовой стрелке, 
%% по принципу левой руки в лабиринте: Ползти червяком прямо,
%% пока ползётся, затем повернуть направо и снова прямо.
clear all; n= 7; m= 5; ...
A= zeros(n,m); t=1; x2= 1; y2= 1; A(1,1)= t; x0=x2; y0=y2; ...
while t<n*m
      x0= x2; y0= y2;
      for x= x0+1:m 
        if A(y0,x)==0 t= t+1; A(y0,x)= t; x2= x; else  break,  end; 
      end; ...   
  
      x0= x2; y0= y2;
      for y= y0+1:n 
        if A(y,x0)==0 t= t+1; A(y,x0)= t; y2= y; else  break,  end;
      end; ...   
        
      x0= x2; y0= y2;
      for x= x0-1:-1:1 
        if A(y0,x)==0 t= t+1; A(y0,x)= t; x2= x; else  break, end;
      end; ...   
         
      x0= x2; y0= y2;
      for y= y0-1:-1:1
        if A(y,x0)==0 t= t+1; A(y,x0)= t; y2= y; else  break, end;
      end; ...   
end; [n, m], A, t

Данные
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[n, m] =
     7     5
A =
     1     2     3     4     5
    20    21    22    23     6
    19    32    33    24     7
    18    31    34    25     8
    17    30    35    26     9
    16    29    28    27    10
    15    14    13    12    11
t =   35

...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873349
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПочему? Вместо 1,2,...,9 сделай 9,8,...,1.
Потому что в такой матрице невозможно раскрутить спираль от центра без разрывов.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873359
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonполудухпереформатировал
как лучше?
Код: plaintext
1.
2.
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}



Это ужасно. Оставь как было.
это ты щас выступил против главного фундамента баз данных - табличной структуры
ни много, ни мало
смело
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873363
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TПочему? Вместо 1,2,...,9 сделай 9,8,...,1.
Потому что в такой матрице невозможно раскрутить спираль от центра без разрывов.
Почему? Например сторона 7.
Было
Код: plaintext
1.
2.
3.
4.
5.
6.
  1  2  3  4  5  6  7
 24 25 26 27 28 29  8
 23 40 41 42 43 30  9
 22 39 48 49 44 31 10
 21 38 47 46 45 32 11
 20 37 36 35 34 33 12
 19 18 17 16 15 14 13
стало
Код: plaintext
1.
2.
3.
4.
5.
6.
 49 48 47 46 45 44 43
 26 25 24 23 22 21 42
 27 10  9  8  7 20 41
 28 11  2  1  6 19 40
 29 12  3  4  5 18 39
 30 13 14 15 16 17 38
 31 32 33 34 35 36 37

Или разговор о чем-то другом?
ИсходникИсходник тут 21987886 , для обратной выдачи сменить вывод на
Код: plaintext
1.
printf("%3d", n*n+1 - spiral(n, x, y));

...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873367
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухmaytonпропущено...

Это ужасно. Оставь как было.
это ты щас выступил против главного фундамента баз данных - табличной структуры
ни много, ни мало
смело

Нет. Я следовал конвенциям от Google/Oracle.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873991
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПочему? Например сторона 7.
В оригинальном топике речь шла о неквадратных матрицах.
В твоём примере было
Код: plaintext
1.
2.
3.
 1  2  3  4  5  6  7
16 17 18 19 20 21  8
15 14 13 12 11 10  9
 
стало
Код: plaintext
1.
2.
21 20 19 18 17 16 15
 6  5  4  3  2  1 14
 7  8  9 10 11 12 13
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39874904
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мож уже и было.
То же самое в браузере, с выводом на экран, просто побаловаться. Я не умею в динамике управлять шириной кнопок в браузере, это надо наверное через стили.

charset="windows-1251"

жать в след-щем порядке:
[N,M] - много не переварит
*new
[start]
*F5

P.S поля отмеченные * обязательны,
остальные необязательны - если, конечно, не интересно.
Дважды *new можно только, если клетки не вывелись на экран.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875580
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный видос про кривые Гилберта-Пеано.

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875581
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли.

1. Универсальная формула перехода от многомерных координат одномерным. С сохранением
относительной стационарности точек.

2. Связь с частотным пространством (Frequency Space) я не очень понял. Но интересно было-бы понять.


3.

Прочее. Практические смыслы которые я знал до этого видоса. Кривая гилберта может быть использована
для архивации картинок. Есть интересное свойство. Любые две соседние точки отличаются не более чем на 1
в на растянутой кривой и в разложении ее на 2 -3 -4 и более мерные пространства. Грубо говоря расстояние
Манхеттена между двумя соседями - всегда равно единице.

Еще один смысл - аллокация диапазонов IP адресов и даже IPv6 которые трудно визуально нарисовать зигзагом
или спиралью. Но в Гилберт укладывается хорошо. Это практический смысл из топика Географии линк на который
я приводил.

Есть какая-то связь с кодом Грея. По крайней мере в разности соседних точек гилбертова пространства.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875589
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот печально известная мадам Лизавета оцифрована мной и обрезана где-то на квадрат 256 на 256 пикселов.
Здесь кратность степени двойки нужна для Гильберта.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875590
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некий концептуальный код для перехода от растра к одной длинной линии.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        BufferedImage src = ImageIO.read(new FileInputStream("Mona-Lisa-crop-256x256.png"));

        BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), src.getType());

        IPixIterator iPixIterator = new GilbertPixelIterator(256);

        IPixIterator destIterator = new LinearPixIterator(256, 256);

        while(iPixIterator.next()) {
            destIterator.next();
            int x = iPixIterator.getX();
            int y = iPixIterator.getY();
            int pixel = src.getRGB(x,y);
            dest.setRGB(destIterator.getX(), destIterator.getY(), pixel);
        }


Линия завёрнута в обычный обход слева направо сверху вниз чтоб опять-же иметь возможность ее видеть.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875633
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГрубо говоря расстояние Манхеттена между двумя соседями - всегда равно единице.

точнее так: между последовательными соседями
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875644
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли лучше выражать не так вяло. Я всё ждал, когда мэйтон после намеков перейдёт к жипегу. От себя могу сказать. В инете написано (можно поискать), что жипеговские квадратики они (ж-эксперты) линеаризовали диагональным зиг-загом, ожидая, возможно справведливо, что так близкие на плоскости точки чаще будут рядом на прямой, чем когда построчно. И значит будут более коррелированы (стоит читать как более плавные), значит будет меньше скачков, меньше ультракоротких волн в разложении Ф., будет выше сжатие блока при том же качестве.
Но у меня есть сомнения в районе диагонали блоков. Ещё есть "блочный эффект" на границах и маленький размер блока (возможно не только по этим 2-м причинам).
Возможно (судя только по "мыслям"), в ролике имелось ввиду это. Теперь скорости позволяют.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875648
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не планировал обсуждать JPEG в этом топике. Да и что в нем обсуждать. Это старая лошадь и мне
было-бы интереснее обсуждать его замены.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875651
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем не менее, связь с волнами для сжатия имхо такая. И, кстати, м.б. одинаково применима для 1-мерного Ф (например, как в жипеге) и для 2-мерного Ф. А то что-то 2-мерное до сих пор в загоне у всех.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875714
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JPEG - это lossy.

Я на хабре где-то видел статью где с помощью нейрос-сети прогнозируется цвет пиксела
на основе его соседей сверху и слева. При этом ошибка прогноза кодируется отдельно как слой
и сжимается. Интересный подход. Я не помню его эффективность и вряд-ли он превышает
PNG. Но сами идея интересна.

На заре изучения этих методов когда я еще учился в универе у меня была идея - рассматривать
lossy сжатие так. Берем картинку и гоним по ней очень грубый ФНЧ с периодом типа половина
размера картинки. Детектируем локальный всплеск. Создаем гладкую функцию типа Гаусса
(колокольчик) которая должна дать компенсацию для этого всплеска. Накладываем на оригинал.
Далее гоним ФНЧ с более высокой частотой. И так далее.

Картинка раскладывается на суперпозицию "колокольчиков". Сжатие останавливаем тогда, когда
сами решим что детальность изображения достаточна для восприятия или мы не превысили некий
коэффциниент полезного соотношения размеров оригинала и вектора колокольчиков.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875732
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ни чуть не лучше прогнозирует, чем Байесовы вероятности. Конечно, если сетка не вычисляет что-нить типа "градиентов освещённости". Зато 100пудов тормозиловей. А если градиенты, то и область применимости ограничена естественными сценами.

А пока ты Гауссов мучал, перешли на вейвлеты - в принципе, те же "пачки" Ф. или гладкий Хаар. Всё уже давно придумано за нас. К тому же у Ф. одна из самых быстрых скорость сходимости.

Автоматические показатели качества изображения - отдельная и нелёгкая задача. Хорошо, когда есть оригинал.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39875734
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я когда думал о колокольчиках - про вейвлеты и слыхом ни слыхал. Да и был это кажется 1996 год.
А первый работающий кодек от LuraWave был анонсирован где-то в 2000х.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39884569
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот. Чисто случайно нашел пример из книги

THE FIRST 10
PROLOG PROGRAMMING
CONTESTS


По заданию - рисует спираль. Сорян за плохое форматирование. Из PDF не удается грамотно скопировать
в clipboard.

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
:- use_module(contestlib, [writeN/2, for/3, int_width/2, write_int/2]).
spiral(N,M) :-
NM is N*M,
int_width(NM,Width),
Width1 is Width + 1,
for(I,1,N),
nl,
for(J,1,M),
distance(N,M,I,J,Distance),
write_int(Distance,Width1),
fail.
spiral(_,_).
distance(_,_,1,J,D) :- !, D is J -
distance(_,M,I,M,D) :- !, D is M +
distance(N,M,N,J,D) :- !, D is N +
distance(N,M,I,1,D) :- !, D is 2*N
distance(N,M,I,J,D) :-
N1 is N - 2,
M1 is M - 2,
I1 is I - 1,
J1 is J - 1,
distance(N1,M1,I1,J1,D1),
D is 2*N + 2*M + D1 - 4.
1 + 1.
I - 2 + 1.
2*M - J - 2 + 1.
+ 2*M - I - 3 + 1.
...
Рейтинг: 0 / 0
94 сообщений из 94, показаны все 4 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ну что... с пятницей чтоли
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]