Author Topic: Scan PXL  (Read 9625 times)

0 Members and 1 Guest are viewing this topic.

dimcik_18

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

ЦИТРИН

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

Oraven

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

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


dimcik_18

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Scan PXL
« Reply #3 on: November 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 я определяю координаты одноцвенных пикселей а сечас нужно их сортировать по координатам чтоб узнать  какие находится рядом.
вот снизу поле может для понимание моей идей .

спосибо за ранее
« Last Edit: November 07, 2013, 03:17:54 PM by dimcik_18 »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Scan PXL
« Reply #4 on: November 07, 2013, 12:22:46 PM »
А не проще ли использовать поиск картинки в два пикселя?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Scan PXL
« Reply #5 on: November 07, 2013, 02:19:14 PM »
Может так?
Code: (clickermann) [Select]
LOGCLEAR

GETSCREEN
SCANPXL($ARR, 0,0,$_xmax,$_ymax, 255)

$num_X = 1
$i = 0
FOR ($i, $i<ARRSIZE($ARR), 2)
   IF($i < ARRSIZE($ARR))
      IF ($ARR[$i-2]+1 = $ARR[$i])
         INC($num_X)
      ELSE
         IF($num_X > 1)
            $txt = STRCONCAT("найдены ", $num_X, " смежных пикселей начиная с X = ", $ARR[$i-2]-$num_X+1, " общий Y = ", $ARR[$i-1])
            LOGWRITE ($txt)
            $num_X = 1
         END_IF
      END_IF
   END_IF
   $temp = $i
END_CYC

IF($num_X > 1)
   LOGWRITE ("найдены ", $num_X, " смежных пикселей начиная с X = ", $ARR[$temp-2]-$num_X+1, " общий Y = ", $ARR[$temp-1])
END_IF

HALT

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Scan PXL
« Reply #6 on: November 07, 2013, 02:44:25 PM »
по ходу написания напоролся на косяк.
Если LOGWRITE состоит больше, чем из 5 частей и при этом внутри IF то всё остальное до END_IF не выполняется.
Code: (clickermann) [Select]
$num_X = 5
IF($num_X > 0)
   LOGWRITE ("1","2","3","4","5","6")
   $num_X = 1
   $num_X = 3
END_IF

LOGWRITE ($num_X)
HALT


dimcik_18

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Scan PXL
« Reply #7 on: November 07, 2013, 02:58:49 PM »
Вот что у меня есть :
Code: [Select]
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

вот резултат лога:
Code: [Select]
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

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Scan PXL
« Reply #8 on: November 07, 2013, 03:20:14 PM »
И какую информацию дал этот пример? Как искать и так все знают. Тебе то что нужно?
Конкретно какую информацию ты хочешь получить из координат?


dimcik_18

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

Vint

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

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


dimcik_18

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

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

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

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

Vint

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

А ты эти места проверить не забыл?
    ?     ?
 ?   OO  ?         
    ?     ?   
« Last Edit: November 07, 2013, 05:30:20 PM by Vint »


dimcik_18

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

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

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