public function testMisc()
 {
     $p1 = new WMPoint(0, 0);
     $p2 = new WMPoint(10, 0);
     $p3 = new WMPoint(0, 10);
     $this->assertEquals(50, getTriangleArea($p1, $p2, $p3));
     $p1 = new WMPoint(6, 35);
     $p2 = new WMPoint(15, 10);
     $p3 = new WMPoint(50, 29);
     $this->assertEquals(523, getTriangleArea($p1, $p2, $p3));
 }
 function simplify($epsilon = 1.0E-10)
 {
     $output = new WMSpine();
     $output->addPoint($this->points[0][0]);
     $maxStartIndex = count($this->points) - 2;
     $skip = 0;
     for ($n = 1; $n <= $maxStartIndex; $n++) {
         // figure out the area of the triangle formed by this point, and the one before and after
         $area = getTriangleArea($this->points[$n - 1][0], $this->points[$n][0], $this->points[$n + 1][0]);
         if ($area > $epsilon) {
             $output->addPoint($this->points[$n][0]);
         } else {
             // ignore n
             $skip++;
         }
     }
     wm_debug("Skipped {$skip} points of {$maxStartIndex}\n");
     $output->addPoint($this->points[$maxStartIndex + 1][0]);
     return $output;
 }