дан двумерный массив, в нем имеются фигуры (нарисованные точками как я поняла), 1-закрашенная точка, 0-не закрашенная. при нажатии мышкой на фигуру она должна закрашиваться.
я не понимаю как в двумерном массиве рисовать фигуры, для начала...
рыбка Как определяются массивы знаешь? (я немного подзабыл, про двухмерные)
Значит массив у тебя будет состоять из строк, в которых будет одинаковое количество элементов. В качестве примера берёшь лист бумаги в клеточку и обводишь прямоугольник, в котором есть строки и ячейки в строках (столбцы)
0 белая клеточка, 1 чёрная. Можено купить японский кроссоврд и взять картинку из обучения, она там 10х10.
Теперь главное понять как закрашивать и насколько большой может быть массив.
Если ткнули в точку k,l, то мы проверяем есть ли там 1, если есть, то закрашиваем (наверное на экране) И вызываем проверку для точек с 4 сторон. Ещё, наверное, стоит эту точку пометить закрашенной, тоесть приравнять её 2-м. и закрашивать только 1-чки.
т.е. ты имеешь ввиду закрашивать линию прямоугольника? т.к. его линии - это есть точки которые равны 1, правильно? так вот закрасить его нужно внутри. (думаю границу не обязательно закрашивать. уточню сегодня)
получается мы ткнули в точку k, l если там 0? но эта точка находится внутри фигуры мы должны пройтись в четыре стороны от нее? до тех пор пока с четырех сторон не найдем точки которые равны 1? если нашли всего 3 точки, то мы находимся на нашем холсте, а жти три точки - это начала трех фигур, мы в нее не ткнули получается... я правильно понимаю?
и да. метод точно должен быть с рекурсией.. мне что только её и дают=(((
не правильно.
я так понимаю, что в матрице у нас указано что-то типа:
0000110000
0011111100
0111001110
0110000110
1100000011
1100000011
0110000110
0111001110
0011111100
0000110000
Уточни, как должна происходить закраска, и что у нас отмечают 1-чки.
0-пустая клетка
1-контур фигуры (там черный цвет к примеру)
2-цвет заливки фигуры
я так поняла что примерно как в пэйнте - когда мы рисуем фигуру какую-то и заливаем..
к примеру мы тыкаем в точку k, l , если ее значение "0" - то закрашиваем ее, далее по часовой стрелке заливаем 8 точек вокруг нее (проверяя не равна ли какая из этих точек "1" - т.е. контуру) , далее переходим на след.точку (например k, l+1 ) вокруг нее уже какие то точки закрашены цветом 2, точно так же проверяем нет ли там контура. т.о. мы закрашиваем только те точки которые равны "0". правильно я вижу реализацию этой задачи?????
Процедура заливки: procedure FillPoint(i,j:integer); begin if (i<=0) or (i> xmax) or (j<=0) or (j>ymax) or (mas[i,j]<>1) then break;
mas[i,j]:=2;
FillPoint(i-1,j);
FillPoint(i,j-1);
FillPoint(i+1,j);
FillPoint(i,j+1); end;
да нету никакого ТЗ=) эта задача была изложена устно.
имеется двумерный массив, в котором рисуются фигуры (представь себе как в пэйнте открываешь чистый холст, выбираешь карандаш и начинаешь рисовать фигуры разной степени сложности) и вот при нажатии на какую то часть фигуры (замкнутую) она закрашивается в какой-то цвет.
цет холста - 0, цвет контура - 1, цвет заливки - 2. в кач-ве примера картинку прикрепляю:
История ПЧ в Journals.ru
[Print] 1 2 3 4 5 6
Lugavchik