You could rate them on an exponential curve from the proper color. I don't know what the results would actually look like but in theory it should be better than vectorDist.
function colorMatch(%colorList, %color)
{
for(%i = 0; %i < getFieldCount(%colorList); %i++)
{
%testColor = getField(%colorList, %i);
%rDiff = mPow(mAbs(getWord(%testColor, 0) - getWord(%color, 0)),1.2);
%gDiff = mPow(mAbs(getWord(%testColor, 1) - getWord(%color, 1)),1.2);
%bDiff = mPow(mAbs(getWord(%testColor, 2) - getWord(%color, 2)),1.2);
%totalDiff = %rDiff + %gDiff + %bDiff;
if(%totalDiff < %lowestDiff || %lowestDiff $= "")
{
%lowestDiff = %totalDiff;
%lowestColor = %testColor;
}
}
return %lowestColor;
}
The exponential factor should make it throw out colors that are too different on any combination of axes.