как сохранить координаты в С++

Вопрос: У меня есть матрица с кубами, которые имеют эти цвета: красный, зеленый, желтый. Некоторые из кубов, которые находятся рядом друг с другом, контактируют с другими, которые имеют один и тот же цвет. Например: 1 2 3 4 5 1 r r g y r 2 g y g g g 3 g y r

Вопрос:

У меня есть матрица с кубами, которые имеют эти цвета: красный, зеленый, желтый.

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

1 2 3 4 5 1 r r g y r 2 g y g g g 3 g y r g r 4 g g r g g

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

bool Move(Cubes & Test, Cubes & Kub, int i, int j, int p, string color, int & count){ int tt = 0; bool yra = false; if(Test.Get(i, j).GetCube(p) == Color){ Test.SetSP(i, j, p, «-«); count++; while(!yra && tt < 4 ){ i = i + Test.GetEil(tt); j = j + Test.GetStu(tt++); if(Test.Get(i, j).GetCube(p) == color){ Move(Test, Kub, i, j, p, color, count); } } } return yra; } void Max(int & count, int & max, string & s, string Spal[], int sp, Maximum Maxi[], int & ind, int i, int j){ if(count!=0){ Maxi[ind].Set(count, Spal[sp]); ind++; } if(max < count){ max = count; count = 0; s = Spal[sp]; } else count = 0; }

И теперь мне как-то нужно сохранить координаты зеленого цвета, которые находятся рядом друг с другом.

Что я должен сделать для этого?

Ответ №1

Из вашего вопроса, я думаю, вы пытаетесь определить ближайший квадрат, а не куб, поскольку вы используете две переменные для отслеживания i и j. Кроме того, я не могу точно комментировать код, поскольку некоторые детали отсутствуют.

Итак, поскольку вы спросили, как определить ближайший “куб” (sic) – т.е. Квадрат – это то, что называется ” Ближайший соседский поиск”, который также известен как пост-офисная проблема, сложность которого увеличивается с размерностью.

Тем не менее, рассмотрев вашу сетку и сделав предположение, что мы ограничены 2D:

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

Поэтому, если мы знаем координаты каждого квадрата, мы можем рассчитать расстояние до каждого из текущего квадрата, о котором идет речь.

ПРИМЕР

Ближайшие соседи желтого квадрата на (ряд 1, колонка 4) (при условии, что размер по два для каждой стороны):

Эта сетка образцов имеет два других желтых квадрата square1(2, 2) и square2(3, 2)

Если предположить, что эта сетка декартова, нижний левый угол зеленого квадрата (строка 4, столбец 1) центрирован по координате (1.0, 1.0) (помните, мы говорили, что стороны имеют длину 2). Затем координаты центра для:

yellow: (7.0, 7.0) square1: (3.0, 5.0) square2: (3.0, 3.0)

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

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

yellow -> square1: sqrt(4^2 + 2^2) = sqrt(20) = 4.4721… yellow -> square2: sqrt(4^2 + 4^2) = 4*sqrt(2) = 5.6569…

Из этого можно ясно видеть, что square1 ближе к желтому квадрату (строка 1, col 4).

  1. Таким образом, один из способов расчета этих координат – опросить сетку для всех квадратов другого цвета, определить их соответствующие координаты.

  2. Затем, итерации по этим координатам (по центру или по центру) и определите, какой квадрат имеет наименьшее расстояние до конкретного квадрата.

  3. Сохраните координаты исходного квадрата и ближайшего квадрата.

  4. Повторите все квадраты.

Для более подробного ознакомления с этим вы можете проконсультироваться:

http://web.engr.oregonstate.edu/~tgd/classes/534/slides/part3.pdf

Оцените статью
Добавить комментарий