The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Смещение контура матрицы. Алгоритм  (развлекательная задача)"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (PHP)
Изначальное сообщение [ Отслеживать ]

"Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от dcc0email (ok), 21-Фев-21, 16:21 
Доброго!
Смотрел способы транспонирования матриц.
И возникла такая мысль: как минимальными средствами сдвинуть только контур (пусть будет квадтратной) матрицы. Например,  на  1 позицию, или последовательно на несколько позиций (в цикле).
Конутром матрицы считается:

1) Верхняя строка
2) Правый столбец  
3) Нижняя строка
4) Левый столбец
Относительно пользователя, глядящего в экран :)

Пока получился такой алгоритм: сохранить контур в отельном массиве - contour.
1) Циклически сдвинуть на 1 позицию  массив contour.
2) Переписать строки и столбцы в матрице.

Для матрицы размером 3*3, получается так:


<?php

        /*Циклическое смещение контура на единицу*/    
        
        
        /*Матрица*/            
        $matrix[0]=array( 1,1,1);
        $matrix[1]=array( 2,2,2);
        $matrix[2]=array( 3,3,3);
    
        /*Контур  матрицы */
        $contour=array(1,1,1,2,3,3,3,2);
    
    
    for ($j=0; $j < 8; $j++)
    
    
    {        
            
        /*Сдвигаем массив*/    
        $temp=array_pop($contour);
        array_unshift($contour, $temp);
        
        /*Смещение верхней и правой границы*/
        foreach ($matrix[0] as $k => $value)
        {
        $matrix[0][$k]=$contour[$k];    
        $matrix[$k][2]=$contour[$k+2];
        }
        
        /*Смещение нижней границы*/
        $x=3;
        for ($i=0; $i < 3; $i++)
        $matrix[2][--$x]=$contour[$i+4];
        
        /*Смещение левой границы*/
        $x=2;
        for ( $i=0; $i < 1; $i++)                 
        $matrix[--$x][0]=$contour[$i+7];
        
        
        /*Печатаем*/
        print '<br/>';
        print_r($matrix[0]);
        print '<br/>';
        print_r($matrix[1]);
        print '<br/>';
        print_r($matrix[2]);
        print '<br/>';
        print_r($matrix[3]);
        print '<br/>';
        print '<br/>';
        print '<br/>';
}
?>



Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от Аноним (-), 22-Фев-21, 10:52 
> Доброго!

Ух мать, это тебе в первый класс по каэс 50. Потом приходи с вопросом - объясню как оптимально.

Ответить | Правка | Наверх | Cообщить модератору

2. "Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от dcc0 (ok), 22-Фев-21, 19:01 
>> Доброго!
> Ух мать, это тебе в первый класс по каэс 50. Потом приходи
> с вопросом - объясню как оптимально.

Спасибо. Не знал про такой курс.
По видео - долго. Привык к тексту.
Но зачем мне самое начало? :)

P.S.
Топ развлекательный.

Ответить | Правка | Наверх | Cообщить модератору

3. "Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от Аноним (-), 23-Фев-21, 12:56 

> По видео - долго. Привык к тексту.

это ни шняга ютупная, тот случай когда можно, на пальцах по другому ни рассказать

Ответить | Правка | Наверх | Cообщить модератору

4. "Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от Аноним (-), 23-Фев-21, 13:00 
Зыж на такой тип матредцы лихко ложаца все алгоритмы работы с rgb, тысячи их, в чем развлекуха то должна заключацо ?
Ответить | Правка | Наверх | Cообщить модератору

5. "Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от dcc0email (ok), 23-Фев-21, 13:43 
> Зыж на такой тип матредцы лихко ложаца все алгоритмы работы с rgb,
> тысячи их, в чем развлекуха то должна заключацо ?

Не знал. Я залип над этим вопросом из любопытства. Подумал, может, уже есть красивый алгоритм.
Кто-то ведь иногда решает бесполезные задачи.
Но вроде бы какой-то алго выстроился у меня.

Ответить | Правка | Наверх | Cообщить модератору

6. "Смещение контура матрицы. Алгоритм  (развлекательная задача)"  +/
Сообщение от Аноним (-), 23-Фев-21, 14:54 

> Но вроде бы какой-то алго выстроился у меня.

на

https://github.com/hankking11/ImageManip/blob/master/ppm.c

первае что в бошку пришло, и что важно - это работает и есть аптимизираванныи реализации хоть под канкретный камень


//This function takes in a ppmPic structure
//and returns a ppmPic structure representing an
//inverted version of the original picture (inverts the colors)
ppmPic *
invertppmPic(ppmPic *a)
    {
    int i;
    int j;                                  //j is the row number
    for (j = 0; j < a->rows; j++)
        {                                   //This for loop inverts each row one at a time
        i = 0;
                                            //i is the column number
        while(i < a->cols)
            {                               //This while loop inverts one row (row j)
            a->pixels[j][i].red = a->colors - a->pixels[j][i].red;
            a->pixels[j][i].green = a->colors - a->pixels[j][i].green;
            a->pixels[j][i].blue = a->colors - a->pixels[j][i].blue;
            i++;
            }
        }
    return a;
    }

//This function takes in a ppmPic structure
//and returns a ppmPic structure representing a
//horizontally flipped version of the original picture
ppmPic *
swapppmPic(ppmPic *a)
    {
    int i;                                  
    Pixel temp;
    int j;                          //j is the row number
    for (j = 0; j < a->rows; j++)
        {                           //This for loop swaps each row, one at a time
        i = 0;                      //i is the column number
        while(i < a->cols / 2)      //integer division is used, so the middle row is not
            {                       //swapped with itself if there's an odd number of cols
            temp = a->pixels[j][i]; //This while loop swaps one row (row j)
            a->pixels[j][i] = a->pixels[j][a->cols - i - 1];
            a->pixels[j][a->cols - i - 1] = temp;
            i++;
            }
        }
    return a;
    }

//This function takes in a ppmPic structure
//and returns a ppmPic structure representing an
//upside-down version of the original picture
ppmPic *
flipppmPic(ppmPic *a)
    {
    int i;                           // integer division is used, so the middle row
    Pixel temp;                      //is not swapped with itself if there is an
    int j;                           //odd number of rows. (in the for loop
    for (j = 0; j < a->rows / 2; j++)   //condition)
        {                           //This for loop switches the top half to the bottom half
        i = 0;                      //i is the column number
        while(i < a->cols)
            {                       //This while loop switches an upper half row with
            temp = a->pixels[j][i]; //a corresponding lower half row
            a->pixels[j][i] = a->pixels[a->rows - 1 - j][i];
            a->pixels[a->rows - 1 - j][i] = temp;
            i++;
            }
        }
    return a;
    }

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Ideco
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру