Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Координаты групп точек на изобаржении, php (https://forum.antichat.xyz/showthread.php?t=204871)

wildshaman 18.05.2010 13:47

Координаты групп точек на изобаржении, php
 
Имеется изображение
http://img291.imageshack.us/img291/7...051878a3kb.jpg

Один квадратик - один пиксель.
Необходимо в массив с N элементов (где N - группа связанных черных пискселей, в нашем случае 3) занестив каждый элемент строку с координатами точек, входящих в кучу
Тобдбишь на выходе из такой пикчи мы должны получить
a[1]="2,3|2,4|3,4|3,5|"
a[2]="7,6|7,7|8,5|8,6|"
a[3]="10,1|10,2|"

Надо на php и использованием gd.
Бьюсь уже целый час :(
Буду благодарен за код.

dr.Web 18.05.2010 14:01

берёшь первую строчку считаешь кол-во пикселей в ширину, пробегаешь попиксельно и считываешь цвет.если цвет чёрный то пишешь координату в массив. цвет узнавать функцией
ImageColorAt(int image, int x, int y);


image - это картинка
x,y - координаты соответственно

AK3RN 18.05.2010 14:02

Хинт: открой картинку в hex-редакторе

dr.Web 18.05.2010 14:07

а при чём тут хекс?
Цитата:

Надо на php и использованием gd.

GreenBear 18.05.2010 14:09

[offtop]>Бьюсь уже целый час
и все?) иногда и 3 дня на задачу убиваешь, получая в итоге 100 строк кода :)[/offtop]
на самом деле задача очень легкая, главное не кодить, а продумать алгоритм. потом уже кодить.

dr.Web 18.05.2010 14:11

Цитата:

Сообщение от GreenBear
[offtop]>Бьюсь уже целый час
и все?) иногда и 3 дня на задачу убиваешь, получая в итоге 100 строк кода :)[/offtop]
на самом деле задача очень легкая, главное не кодить, а продумать алгоритм. потом уже кодить.

согласен.

wildshaman 18.05.2010 14:18

Цитата:

Сообщение от dr.Web
берёшь первую строчку считаешь кол-во пикселей в ширину, пробегаешь попиксельно и считываешь цвет.если цвет чёрный то пишешь координату в массив.

Соль в том, что надо именно находить ГРУППЫ элементов


Ан нет, решения не нашел верного :(

astrologer 18.05.2010 15:27

Похоже на ту самую задачу уровня продвинутого школьника из темы "Как стать программистом". Классификация ещё та, конечно, определенно радует "аналог wget" - а это огромный объем работы - сразу после чего следует BB-парсер для которого достаточно определить автомат со стеком.

Kaimi 18.05.2010 15:40

Как вариант: найди реализацию алгоритма волновой трассировки и допиши под себя.
Задача на графы же...

eLWAux 18.05.2010 16:18

воть:

сперва превращает твою картинку в матрицу, типа:
Цитата:

(0,0)0 (0,1)0 (0,2)0 (0,3)0 (0,4)0 (0,5)0 (0,6)0 (0,7)0 (0,8)0 (0,9)1 (0,10)0 (0,11)0
(1,0)0 (1,1)0 (1,2)0 (1,3)0 (1,4)0 (1,5)0 (1,6)0 (1,7)0 (1,8)0 (1,9)1 (1,10)0 (1,11)0
(2,0)0 (2,1)1 (2,2)0 (2,3)0 (2,4)0 (2,5)0 (2,6)0 (2,7)0 (2,8)0 (2,9)0 (2,10)0 (2,11)0
(3,0)0 (3,1)1 (3,2)1 (3,3)0 (3,4)0 (3,5)0 (3,6)0 (3,7)0 (3,8)0 (3,9)0 (3,10)0 (3,11)0
(4,0)0 (4,1)0 (4,2)1 (4,3)0 (4,4)0 (4,5)0 (4,6)0 (4,7)1 (4,8)0 (4,9)0 (4,10)0 (4,11)0
(5,0)0 (5,1)0 (5,2)0 (5,3)0 (5,4)0 (5,5)0 (5,6)1 (5,7)1 (5,8)0 (5,9)0 (5,10)0 (5,11)0
(6,0)0 (6,1)0 (6,2)0 (6,3)0 (6,4)0 (6,5)0 (6,6)1 (6,7)0 (6,8)0 (6,9)0 (6,10)0 (6,11)0
Потом распознает.
Результат:
PHP код:

array(3) {
  [
0]=>  string(7"0,9|1,9"
  
[1]=>  string(15"2,1|3,1|3,2|4,2"
  
[2]=>  string(15"4,7|5,6|5,7|6,6"


Сорс: http://paste.ly/1aF


Время: 03:37