Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Вариант проще, без экзотики.
Исходник
+
%% по спирали, начиная с А(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
Данные
+
[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
8 окт 19, 09:49    [21989119]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48652
Dima T
Почему? Вместо 1,2,...,9 сделай 9,8,...,1.

Потому что в такой матрице невозможно раскрутить спираль от центра без разрывов.
8 окт 19, 13:58    [21989413]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 946
mayton
полудух
переформатировал
как лучше?
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}


Это ужасно. Оставь как было.

это ты щас выступил против главного фундамента баз данных - табличной структуры
ни много, ни мало
смело Картинка с другого сайта.
8 окт 19, 14:12    [21989429]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dima T
Member

Откуда:
Сообщений: 14098
Dimitry Sibiryakov
Dima T
Почему? Вместо 1,2,...,9 сделай 9,8,...,1.

Потому что в такой матрице невозможно раскрутить спираль от центра без разрывов.

Почему? Например сторона 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
стало
 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, для обратной выдачи сменить вывод на
printf("%3d", n*n+1 - spiral(n, x, y));
8 окт 19, 14:17    [21989436]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
полудух
mayton
пропущено...

Это ужасно. Оставь как было.

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

Нет. Я следовал конвенциям от Google/Oracle.
8 окт 19, 14:18    [21989441]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48652
Dima T
Почему? Например сторона 7.

В оригинальном топике речь шла о неквадратных матрицах.
В твоём примере было

1 2 3 4 5 6 7
16 17 18 19 20 21 8
15 14 13 12 11 10 9
стало

21 20 19 18 17 16 15
6 5 4 3 2 1 14
7 8 9 10 11 12 13
9 окт 19, 13:50    [21990393]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Мож уже и было.
То же самое в браузере, с выводом на экран, просто побаловаться. Я не умею в динамике управлять шириной кнопок в браузере, это надо наверное через стили.

charset="windows-1251"

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

P.S поля отмеченные * обязательны,
остальные необязательны - если, конечно, не интересно.
Дважды *new можно только, если клетки не вывелись на экран.

К сообщению приложен файл (4-spiral.html - 5Kb) cкачать
10 окт 19, 20:15    [21991695]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Интересный видос про кривые Гилберта-Пеано.

+
12 окт 19, 21:36    [21992920]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Мысли.

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

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


3.

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

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

Есть какая-то связь с кодом Грея. По крайней мере в разности соседних точек гилбертова пространства.
12 окт 19, 21:45    [21992921]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Вот печально известная мадам Лизавета оцифрована мной и обрезана где-то на квадрат 256 на 256 пикселов.
Здесь кратность степени двойки нужна для Гильберта.

К сообщению приложен файл. Размер - 138Kb
12 окт 19, 23:45    [21992942]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Некий концептуальный код для перехода от растра к одной длинной линии.
        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);
        }

Линия завёрнута в обычный обход слева направо сверху вниз чтоб опять-же иметь возможность ее видеть.

К сообщению приложен файл. Размер - 74Kb
12 окт 19, 23:47    [21992943]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1771
mayton
Грубо говоря расстояние Манхеттена между двумя соседями - всегда равно единице.


точнее так: между последовательными соседями
13 окт 19, 12:18    [21993025]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Мысли лучше выражать не так вяло. Я всё ждал, когда мэйтон после намеков перейдёт к жипегу. От себя могу сказать. В инете написано (можно поискать), что жипеговские квадратики они (ж-эксперты) линеаризовали диагональным зиг-загом, ожидая, возможно справведливо, что так близкие на плоскости точки чаще будут рядом на прямой, чем когда построчно. И значит будут более коррелированы (стоит читать как более плавные), значит будет меньше скачков, меньше ультракоротких волн в разложении Ф., будет выше сжатие блока при том же качестве.
Но у меня есть сомнения в районе диагонали блоков. Ещё есть "блочный эффект" на границах и маленький размер блока (возможно не только по этим 2-м причинам).
Возможно (судя только по "мыслям"), в ролике имелось ввиду это. Теперь скорости позволяют.
13 окт 19, 13:55    [21993046]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Я не планировал обсуждать JPEG в этом топике. Да и что в нем обсуждать. Это старая лошадь и мне
было-бы интереснее обсуждать его замены.
13 окт 19, 14:11    [21993051]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Тем не менее, связь с волнами для сжатия имхо такая. И, кстати, м.б. одинаково применима для 1-мерного Ф (например, как в жипеге) и для 2-мерного Ф. А то что-то 2-мерное до сих пор в загоне у всех.
13 окт 19, 14:23    [21993054]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
JPEG - это lossy.

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

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

Картинка раскладывается на суперпозицию "колокольчиков". Сжатие останавливаем тогда, когда
сами решим что детальность изображения достаточна для восприятия или мы не превысили некий
коэффциниент полезного соотношения размеров оригинала и вектора колокольчиков.
13 окт 19, 21:13    [21993247]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Да ни чуть не лучше прогнозирует, чем Байесовы вероятности. Конечно, если сетка не вычисляет что-нить типа "градиентов освещённости". Зато 100пудов тормозиловей. А если градиенты, то и область применимости ограничена естественными сценами.

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

Автоматические показатели качества изображения - отдельная и нелёгкая задача. Хорошо, когда есть оригинал.
13 окт 19, 23:27    [21993289]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Я когда думал о колокольчиках - про вейвлеты и слыхом ни слыхал. Да и был это кажется 1996 год.
А первый работающий кодек от LuraWave был анонсирован где-то в 2000х.
13 окт 19, 23:36    [21993292]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42936
Вот. Чисто случайно нашел пример из книги

THE FIRST 10
PROLOG PROGRAMMING
CONTESTS


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

:- 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.
2 ноя 19, 09:45    [22008610]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / Программирование Ответить