На мой взгляд тут основная проблема в читабельности кода, я бы предложил занести всё в булевы переменные и потом использовать их.

Код AS3:
// Запоминаем условия для X
var isXEqualPrev:Boolean = (x[i] == x[i-1]);
var isXEqualNext:Boolean = (x[i] == x[i+1]);
var isXMorePrev:Boolean = (x[i] > x[i-1]);
var isXMoreNext:Boolean = (x[i] > x[i+1]);
var isXLessPrev:Boolean = (x[i] < x[i-1]);
var isXLessNext:Boolean = (x[i] < x[i+1]);
// Запоминаем условия для Y
var isYEqualPrev:Boolean = (y[i] == y[i-1]);
var isYEqualNext:Boolean = (y[i] == y[i+1]);
var isYMorePrev:Boolean = (y[i] > y[i-1]);
var isYMoreNext:Boolean = (y[i] > y[i+1]);
var isYLessPrev:Boolean = (y[i] < y[i-1]);
var isYLessNext:Boolean = (y[i] < y[i+1]);
// Проверка всех систем
if(isXEqualPrev && isXLessNext && isYEqualNext && isYEqualPrev)
{
//…
}else if(isXEqualNext && isXLessPrev && isYEqualPrev && isYLessNext)
{
//…
}
Как альтернатива занесения всех возможных условий в отдельные переменные можно в самом начале создать только 8 переменных, каждая из которых будет отвечать за соответствующую систему, и уже работать с этими переменными, например так:

Код AS3:
var isSystem1:Boolean = (x[i] == x[i-1] && x[i] < x[i+1] && y[i] == y[i+1] && y[i] < y[i-1]);
var isSytem2:Boolean = …