код который работает примерно такой,
UNDEFINE($trees_arr)
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 16739583)
$x_pl = $_return1
$y_pl = $_return2
END_IF //находим нахождение "зеленой точки"
SCANPXL($trees_arr, $x_pl-200,$y_pl-200,$x_pl+200,$y_pl+200, 255) //нашли все точки красные, их намного больше чем 15, так как метки большие, и разные, это скапления цвета 255
WHILE(ARRSIZE($trees_arr))
$min_dist = DIST($x_pl,$y_pl,$trees_arr[0],$trees_arr[1])
$near_tree_x = $trees_arr[0]
$near_tree_y = $trees_arr[1]
FOR($i=2,$i<ARRSIZE($trees_arr),2)
$temp_dist = DIST($x_pl,$y_pl,$trees_arr[$i],$trees_arr[$i+1])
IF($temp_dist < $min_dist)
$min_dist = $temp_dist
$near_tree_x = $trees_arr[$i]
$near_tree_y = $trees_arr[$i+1]
END_IF
END_CYC
//нашли точку которая на минимальном расстоянии
//тут двигаемся к красной точке по координатам $near_tree_x $near_tree_у
//делаем действия, она пропадает
//и дальше пока не пропадут все красные метки.
GETSCREEN($x_pl-200,$y_pl-200,$x_pl+200,$y_pl+200)
IF_PIXEL_IN($x_pl-200,$y_pl-200,$x_pl+200,$y_pl+200, 16739583)
$x_pl = $_return1
$y_pl = $_return2
END_IF
UNDEFINE($trees_arr)
SCANPXL($trees_arr, $x_pl-200,$y_pl-200,$x_pl+200,$y_pl+200, 255)
END_CYC
не относится к рисунку в примере. убрал лишнее.
и да, все верно, часто маршрут выходит уж очень не выгодный. часто собирает точки в одном направлении, и в конце возвращается за точкой в начало, вместо того чтобы взять одну точку которая хоть и дальше немного, но потом чтоб за ней не возвращаться.