static private function simplifyInternal( &$points, $epsilon, $start, $end )
{
$firstPoint = $points[$start];
$lastPoint = $points[$end];
$index = -1;
$dist = 0;
if ($end - $start < 2) {
return;
}
for ($i = $start + 1; $i < $end; $i++) {
if (! isset($points[$i])) {
continue;
}
$cDist = self::findPerpendicularDistance($points[$i], $firstPoint, $lastPoint);
if ($cDist > $dist) {
$dist = $cDist;
$index = $i;
}
}
if ($dist > $epsilon) {
self::simplifyInternal($points, $epsilon, $start, $index);
self::simplifyInternal($points, $epsilon, $index, $end);
return;
} else {
for ($i = $start + 1; $i < $end; $i++) {
unset($points[$i]);
}
return;
}
}