Что нового

Определение движущегося объекта и постепенное заполнение его цветом

DenLDI

Новичок
Сообщения
4
Репутация
0
Доброго времени суток!

Исходные данные :
1 область поиска
2 А,В и С искомые координаты прямоугольника который в определенный отрезок времени меняет свое местоположение в области поиска , внутренняя часть прямоугольника постепенно заполняется серым цветом.
3 Случайно возникающие ошибочные пиксели такого же цвета как и искомая координата А



Задача:

Сделать функцию которая:
1 за определенное время находит точку А , ее можно считать верной, если исходя из полученных координат А существует точка В с таким же цветом , координаты которой известны относительно координат точки А
2 Если точка А - верна, проверяем цвет точки С координаты которой тоже известны относительно А
3 точка С верна если ее цвет серый (прямоугольник заполнился серым цветом , функция отработала успешно)

В простом виде когда точка А единственная этого цвета примерно так:

Код:
Func Done() 
	Local $Aс=0xD3D4D5 ; Искомый цвет пикселя точки А

	Local $x1=440 ; границы области поиска
	Local $x2=514
	Local $y1=385
	Local $y2=470
	Local $sh=3 ; вириация цвета
	Local $time=1000;  1 секунда - время проверки
	
	Local $Bx=72 ; координаты точки В относительно полученных координат А 
	Local $By=0

	Local $Cс=0x4A4C4E ; Искомый цвет пикселя точки C
	Local $Gx=71 ; координаты точки С относительно полученных координат А 
	Local $Gy=1

Local $a=PixelSearch( $x1, $y1, $x2, $y2, $Aс, $sh )
If @error=0 Then
	ProgressOn("","","Точка А найдена",1024,0,1)
	local $b=PixelSearch( $a[0]+$Bx, $a[1], $a[0]+$Bx, $a[1], $Aс, $sh )
	If @error=0 Then
		ProgressOn("","","Точка В найдена",1024,0,1)
		local $c=PixelSearch( $a[0]+$Gx, $a[1]+$Gy, $a[0]+$Gx, $a[1]+$Gy, $Cс, $sh )
		If @error=0 Then
			ProgressOn("","","Квадрат заполнен серым цветом",1024,0,1)
		ElseIf @error=1 Then
		EndIf
	ElseIf @error=1 Then
	EndIf
ElseIf @error=1 Then
EndIf
EndFunc


Прошу помощи в решении задачи, когда как на картинке еще много точек с таким цветом , также надо привязать к функции подобный цикл
Код:
Func pointC()
	Local $t = TimerInit()
	Do
	PixelSearch( $a[0]+$Gx, $a[1]+$Gy, $a[0]+$Gx, $a[1]+$Gy, $Cс, $sh )
	If Not @error Then Return True
	If TimerDiff($t) >= $time Then Return False
	Until 0
EndFunc

If pointC() Then
	ProgressOn("","","Квадрат заполнен серым цветом",1024,0,1)
Else
EndIf
который будет управлять поиском, выдавая результат что точка С верна или не верна.


Добавлено:
Сообщение автоматически объединено:

разобрался ;D
 
Верх