Программирование обработки двумерных массивов видеоурок

Этот учебник взят из книги Learning Processing Дэниела Шиффмана. Опубликованной издательством Morgan Kaufmann. © 2008 Elsevier Inc. Все права защищены. Если вы видите какие-либо ошибки или у вас есть комментарии, пожалуйста, сообщите нам обэтом .

Дэниел Шиффман

Массив отслеживает множество фрагментов информации в линейном порядке-одномерный список. Однако данные. Связанные с определенными системами (цифровое изображение. Настольная игра и т. Д.), живут в двух измерениях. Чтобы визуализировать эти данные. Нам нужна многомерная структура данных. То есть многомерный массив.

Двумерный массив-это на самом деле не что иное. Как массив массивов (трехмерный массив-это массив массивов массивов). Подумай о своем ужине. У вас может быть одномерный список всего. Что вы едите:

(салат. Помидоры, стейк. Картофельное пюре, торт. Мороженое)

Или у вас может быть двумерный список из трех блюд. Каждое из которых содержит две вещи. Которые вы едите:

(салат. Помидоры) и (стейк. Картофельное пюре) и (торт. Мороженое)

В случае массива наш старомодный одномерный массив выглядит следующим образом:

int

А двумерный массив выглядит так:

int

Для наших целей лучше представить двумерный массив в виде матрицы.

Матрицу можно представить как сетку чисел. Расположенных рядами и столбцами. Что-то вроде доски для игры в бинго. Мы могли бы записать двумерный массив следующим образом. Чтобы проиллюстрировать этот момент:

int

Мы можем использовать этот тип структуры данных для кодирования информации об изображении. Например, следующее изображение в оттенках серого может быть представлено следующим массивом:

int

Чтобы пройти через каждый элемент одномерного массива. Мы используем цикл for, то есть:

 int[] myArray = новый int[10]; для (int i = 0; iдлина; i++) { 

Для двумерного массива. Чтобы ссылаться на каждый элемент. Мы должны использовать два вложенных цикла.

Это дает нам переменную счетчика для каждого столбца и каждой строки в матрице.

int cols = 10; int rows = 10; int[][] myArray = new int[cols][rows]; // Два вложенных цикла позволяют нам посетить каждую точку в 2D-массиве.  // Для каждого столбца I посетите каждую строку J. for (int i = 0; i) { for (int j = 0; j) { 

Например. Мы можем написать программу. Использующую двумерный массив для рисования изображения в оттенках серого.

размер(200,200); int cols = ширина; int rows = высота; // Declare 2D array int[][] myArray = new int[cols][строки]; // Инициализировать значения 2D массива

для (int i = 0; i) { для (int j = 0; j) { myArray[i][j] = int(random// Нарисуйте точки для (int i = 0; i) { для (int j = 0; j) { инсульт(myArray[i][j]); точка

Двумерный массив также может быть использован для хранения объектов. Что особенно удобно для программирования эскизов. Которые включают в себя своего рода В следующем примере показана сетка объектов ячеек. Хранящихся в двумерном массиве. Каждая ячейка представляет собой прямоугольник. Яркость которого колеблется от 0 до 255 с синусоидальной функцией.

// 2D Массив объектов Ячейка[][] сетка; // Количество столбцов и строк в сетке int cols = 10; int rows = 10; пустая настройка() { размер(200,200); сетка = новая ячейка[cols][rows]; for (int i = 0; i) { for (int j = 0; j) { // Инициализировать каждый объект сетка[i][j] = новая ничья пустоты() { фон(0); // Переменные счетчика i и j также являются номерами столбцов и строк и    // используются в качестве аргументов конструктора для каждого объекта в сетке.    for (int i = 0; i) { for (int j = 0; j) { // Осциллировать и отображать каждый объект

сетка[i][j].осциллировать(); // Ячейка класса объектов Cell { // Объект ячейки знает о своем местоположении в сетке   // а также о своем размере с переменными x,y,w,h   float x,y; // x,y location   float w,h; // ширина и высота   float angle; // угол осциллирующей яркости   // Конструктор ячеек Ячейка(float tempX, float tempY, float tempW, float tempH, float tempAngle) { x = tempX; y = темпИ; w = tempW; // Колебание означает увеличение угла   пустотыvoid display() { stroke(255); // Цвет рассчитывается с использованием синусоидальной     заливки(127+127*sin(угол)); rect