Автор Тема: Scan PXL  (Прочитано 5926 раз)

0 Пользователей и 1 Гость просматривают эту тему.

dimcik_18

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Scan PXL
« : Ноябрь 06, 2013, 02:12:06 pm »
Подскажите пожалуста! Я сканирую область функций scanpxl  нахожу всеx пихелей опеделеного цвета из этой кучи как мне найти пикселей с одинаковой  координаты по X или по Y  ?

ЦИТРИН

  • Супермодератор
  • Оплот сообщества
  • *
  • Сообщений: 484
  • Марафон опавших листьев, коктейль из дыма и мыслей
    • Просмотр профиля
Re: Scan PXL
« Ответ #1 : Ноябрь 07, 2013, 12:24:02 am »
Подскажите пожалуста! Я сканирую область функций scanpxl  нахожу всеx пихелей опеделеного цвета из этой кучи как мне найти пикселей с одинаковой  координаты по X или по Y  ?
Уточните вопрос.
Двух координатно_одинаковых пикселей на экране вроде  теоретически быть не может.
Бабочки полёт будит тихую поляну в солнечном свету...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3685
  • Котэ
    • Просмотр профиля
Re: Scan PXL
« Ответ #2 : Ноябрь 07, 2013, 02:51:52 am »
Подскажите пожалуста! Я сканирую область функций scanpxl  нахожу всеx пихелей опеделеного цвета из этой кучи как мне найти пикселей с одинаковой  координаты по X или по Y  ?
Уточните вопрос.
Двух координатно_одинаковых пикселей на экране вроде  теоретически быть не может.

Он имеет ввиду что нужно отфильтровать из найденных координат только с равными X координатами или Y координатами.


dimcik_18

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Scan PXL
« Ответ #3 : Ноябрь 07, 2013, 09:37:27 am »
Да , Oraven вы правы
После сканирование  получается куча  [x1, y1, x2, y2, … , xn, yn] где x,y – пара координат, n-количество найденных пикселей. можно использовать функцию if ,
for ($i,$i<$n+1)
if ($x*$i=$x*$i+1)
Inc($h,1)
end_if
end_cyc
logwrite("найдены" $h  "пикселей с одинаковой координаты :"  $x )
это примерно так я вижу в теорий а в практике чтото не получается может у когото есть идея.
вот моя задача:
количество пикселей  36.координаты пикселей я знаю они расположены в квадрате  6 на 6 пикселей шагом 41 пикселей между ними и по X и по Y. пиксели бывают 5 цветов . мне нужно создать бот который определит  одоцветные пиксели которые находится рядом. с помоши scanpxl я определяю координаты одноцвенных пикселей а сечас нужно их сортировать по координатам чтоб узнать  какие находится рядом.
вот снизу поле может для понимание моей идей .

спосибо за ранее
« Последнее редактирование: Ноябрь 07, 2013, 03:17:54 pm от dimcik_18 »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3685
  • Котэ
    • Просмотр профиля
Re: Scan PXL
« Ответ #4 : Ноябрь 07, 2013, 12:22:46 pm »
А не проще ли использовать поиск картинки в два пикселя?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3800
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Scan PXL
« Ответ #5 : Ноябрь 07, 2013, 02:19:14 pm »
Может так?
Код: Clickermann
  1. LOGCLEAR
  2.  
  3. GETSCREEN
  4. SCANPXL($ARR, 0,0,$_xmax,$_ymax, 255)
  5.  
  6. $num_X = 1
  7. $i = 0
  8. FOR ($i, $i<ARRSIZE($ARR), 2)
  9.   IF($i < ARRSIZE($ARR))
  10.      IF ($ARR[$i-2]+1 = $ARR[$i])
  11.         INC($num_X)
  12.      ELSE
  13.         IF($num_X > 1)
  14.            $txt = STRCONCAT("найдены ", $num_X, " смежных пикселей начиная с X = ", $ARR[$i-2]-$num_X+1, " общий Y = ", $ARR[$i-1])
  15.            LOGWRITE ($txt)
  16.            $num_X = 1
  17.         END_IF
  18.      END_IF
  19.   END_IF
  20.   $temp = $i
  21. END_CYC
  22.  
  23. IF($num_X > 1)
  24.   LOGWRITE ("найдены ", $num_X, " смежных пикселей начиная с X = ", $ARR[$temp-2]-$num_X+1, " общий Y = ", $ARR[$temp-1])
  25. END_IF
  26.  
  27. HALT

Смежные по X. Или картинку покажи что куда.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3800
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Scan PXL
« Ответ #6 : Ноябрь 07, 2013, 02:44:25 pm »
по ходу написания напоролся на косяк.
Если LOGWRITE состоит больше, чем из 5 частей и при этом внутри IF то всё остальное до END_IF не выполняется.
Код: Clickermann
  1. $num_X = 5
  2. IF($num_X > 0)
  3.   LOGWRITE ("1","2","3","4","5","6")
  4.   $num_X = 1
  5.   $num_X = 3
  6. END_IF
  7.  
  8. LOGWRITE ($num_X)
  9. HALT


dimcik_18

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Scan PXL
« Ответ #7 : Ноябрь 07, 2013, 02:58:49 pm »
Вот что у меня есть :
GETSCREEN

$color[0]=3932412
$color[1]=13170943
$color[2]=33362
$color[3]=2097151
$color[4]=7900052
for ($i,$i<arrsize($color))
SCANPXL($var, 505,255, 760,510, $color[$i-1])
while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  INC($Num,1)
INC($tot,1)
  LOGWRITE ("X: ", $X, " Y: ", $Y)
END_CYC
UNDEFINE($var)
LOGWRITE ("=====",$color[$i-1])
LOGWRITE (" найдено: ",$Num)
UNDEFINE($Num)
END_CYC
LOGWRITE ("Всего найдено: ", $tot)
UNDEFINE($tot)
HALT

вот резултат лога:
13:29:38 X: 698 Y: 479
13:29:38 X: 575 Y: 479
13:29:38 X: 575 Y: 438
13:29:38 X: 534 Y: 438
13:29:38 X: 739 Y: 397
13:29:38 X: 657 Y: 356
13:29:38 X: 657 Y: 315
13:29:38 X: 575 Y: 315
13:29:38 X: 739 Y: 274
13:29:38 X: 698 Y: 274
13:29:38 =====цвет1
13:29:38  найдено: 10
13:29:38 X: 534 Y: 479
13:29:38 X: 698 Y: 438
13:29:38 X: 616 Y: 438
13:29:38 X: 698 Y: 397
13:29:38 X: 657 Y: 397
13:29:38 X: 534 Y: 397
13:29:38 X: 698 Y: 315
13:29:38 X: 534 Y: 315
13:29:38 X: 616 Y: 274
13:29:38 X: 534 Y: 274
13:29:38 =====цвет2
13:29:38  найдено: 10
13:29:38 X: 657 Y: 479
13:29:38 X: 657 Y: 438
13:29:38 X: 616 Y: 397
13:29:38 X: 698 Y: 356
13:29:38 X: 575 Y: 274
13:29:38 =====цвет3
13:29:38  найдено: 5
13:29:38 X: 739 Y: 479
13:29:38 X: 739 Y: 438
13:29:38 X: 739 Y: 356
13:29:38 X: 534 Y: 356
13:29:38 =====цвет4
13:29:38  найдено: 4
13:29:38 X: 616 Y: 479
13:29:38 X: 575 Y: 397
13:29:38 X: 616 Y: 356
13:29:38 X: 575 Y: 356
13:29:38 X: 739 Y: 315
13:29:38 X: 616 Y: 315
13:29:38 X: 657 Y: 274
13:29:39 =====цвет5
13:29:39  найдено: 7
13:29:39 Всего найдено: 36

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3800
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Scan PXL
« Ответ #8 : Ноябрь 07, 2013, 03:20:14 pm »
И какую информацию дал этот пример? Как искать и так все знают. Тебе то что нужно?
Конкретно какую информацию ты хочешь получить из координат?


dimcik_18

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Scan PXL
« Ответ #9 : Ноябрь 07, 2013, 03:35:25 pm »
И какую информацию дал этот пример? Как искать и так все знают. Тебе то что нужно?
Конкретно какую информацию ты хочешь получить из координат?
я добавил картинку в преведушей сообшений . Исползуя координат хочу определить одноцветные пиксели  которые нажодится рядом  для создане бота который оприделил бы оптимальный ход.
у меня есть версия этого бота где я использовал if_pixel_in но он посто делает ход  соединяя 3 камни
в примере просто показал с чего я начал и общую картину в коркретной ситуаций
и может быть это ошибочный путь то что я начал !
« Последнее редактирование: Ноябрь 07, 2013, 03:46:18 pm от dimcik_18 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3800
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Scan PXL
« Ответ #10 : Ноябрь 07, 2013, 04:13:07 pm »
Где-то я это уже видел.
Мне кажется это не правильный путь. Гораздо проще сканировать поле по клеткам. В каждом определяя предмет и сразу же проверять соседние клетки со сдвигом в 41. Если нашлась пара, проверять вокруг крайних полей наличие предмета и сразу делать ход либо запоминать вариант и давать ему "вес".
Так же обработать варианты с исключением из середины:
О-О
- О-

В этом случае подряд вообще ничего нет, а ход есть. Или так:
OO-OO
- - О--


dimcik_18

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Scan PXL
« Ответ #11 : Ноябрь 07, 2013, 05:09:53 pm »
Где-то я это уже видел.
Мне кажется это не правильный путь. Гораздо проще сканировать поле по клеткам. В каждом определяя предмет и сразу же проверять соседние клетки со сдвигом в 41. Если нашлась пара, проверять вокруг крайних полей наличие предмета и сразу делать ход либо запоминать вариант и давать ему "вес".
Так же обработать варианты с исключением из середины:
О-О
- О-

В этом случае подряд вообще ничего нет, а ход есть. Или так:
OO-OO
- - О--

спосибо понял что это путь в некуда. бот каторый у меня есть роботает по этому прицепу сканирует поле по клеткам когда ноходит  OO проверяет ?  и делает ход .
    ?     ?
      OO             OO
    ?     ?                 O

так с помощю if зделал для всех возможных вариантов но есть поблема он делает первый ход каторый находит нету веса просто если я поставил первых красных проверять то если есть ход  он делает его если нет проверяет желтые и.т.д
и это для 3 камней  а если есть 5 дальше он не видит и по этому я думал что по координатам может быть получется.
хотел чтобы бот видел сразу все поле и потом принять решение что двигать
   
« Последнее редактирование: Ноябрь 07, 2013, 05:13:13 pm от dimcik_18 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3800
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Scan PXL
« Ответ #12 : Ноябрь 07, 2013, 05:28:17 pm »
Ты сделай  в 2 прохода. В первом ищет варианты по 5, если нет, вторым проходом ищет обычные.
В каждом естественно цикл по всем предметам.
Или прямо идти по клеткам подряд. 1,2,3... Если нашли вариант из 3,  сохраняем координаты действия. Ищем дальше. Все тройные пропускаем и пытаемся найти на 5 (если нашли, координаты действия перебиваем) или на 6 (координаты действия перебиваем)
Всё. выполняем действие.
На 6 кстати:
- О- -
О-ОО
- О- -
- О- -
Даже на 7 бывает, но их можно и не искать.

А ты эти места проверить не забыл?
    ?     ?
 ?   OO  ?         
    ?     ?   
« Последнее редактирование: Ноябрь 07, 2013, 05:30:20 pm от Vint »


dimcik_18

  • Зашел в гости
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Scan PXL
« Ответ #13 : Ноябрь 07, 2013, 05:57:10 pm »
Ты сделай  в 2 прохода. В первом ищет варианты по 5, если нет, вторым проходом ищет обычные.
В каждом естественно цикл по всем предметам.
Или прямо идти по клеткам подряд. 1,2,3... Если нашли вариант из 3,  сохраняем координаты действия. Ищем дальше. Все тройные пропускаем и пытаемся найти на 5 (если нашли, координаты действия перебиваем) или на 6 (координаты действия перебиваем)
Всё. выполняем действие.
На 6 кстати:
- О- -
О-ОО
- О- -
- О- -
Даже на 7 бывает, но их можно и не искать.

А ты эти места проверить не забыл?
    ?     ?
 ?   OO  ?         
    ?     ?

попробую сегодня написать срипт спосибо большое за идей но как сохранить координаты найденых вариантов? потом из всех найдениых (канечно дать им вес) выбрать лутший ход.
« Последнее редактирование: Ноябрь 07, 2013, 05:58:50 pm от dimcik_18 »