The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Смещение контура матрицы. Алгоритм  (развлекательная задача), !*! dcc0, 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/>';
}
?>



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

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

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

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

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

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

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

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

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

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

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

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

              на

              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;
                  }




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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