Exemplo n.º 1
0
 protected function _drawLine(Image_3D_Point $p1, Image_3D_Point $p2)
 {
     list($x1, $y1) = $p1->getScreenCoordinates();
     list($x2, $y2) = $p2->getScreenCoordinates();
     $steps = ceil(max(abs($x1 - $x2), abs($y1 - $y2)));
     $xdiff = ($x2 - $x1) / $steps;
     $ydiff = ($y2 - $y1) / $steps;
     $points = array();
     for ($i = 0; $i < $steps; ++$i) {
         $points[(int) round($x1 + $i * $xdiff)][(int) round($y1 + $i * $ydiff)] = true;
     }
     return $points;
 }
Exemplo n.º 2
0
 protected function _drawLine(Image_3D_Point $p1, Image_3D_Point $p2)
 {
     list($x1, $y1) = $p1->getScreenCoordinates();
     list($x2, $y2) = $p2->getScreenCoordinates();
     $z1 = $p1->getZ();
     $z2 = $p2->getZ();
     $steps = ceil(max(abs($x1 - $x2), abs($y1 - $y2)));
     $xdiff = ($x2 - $x1) / $steps;
     $ydiff = ($y2 - $y1) / $steps;
     $zdiff = ($z2 - $z1) / $steps;
     $points = array('height' => array(), 'coverage' => array());
     for ($i = 0; $i < $steps; $i++) {
         $x = $x1 + $i * $xdiff;
         $xFloor = floor($x);
         $xCeil = ceil($x);
         $xOffset = $x - $xFloor;
         $y = $y1 + $i * $ydiff;
         $yFloor = floor($y);
         $yCeil = ceil($y);
         $yOffset = $y - $yFloor;
         if (!isset($points['coverage'][(int) $xFloor][(int) $yCeil])) {
             $points['height'][(int) $xFloor][(int) $yCeil] = $z1 + $i * $zdiff;
             $points['coverage'][(int) $xFloor][(int) $yCeil] = (1 - $xOffset) * $yOffset;
         } else {
             $points['coverage'][(int) $xFloor][(int) $yCeil] += (1 - $xOffset) * $yOffset;
         }
         if (!isset($points['coverage'][(int) $xFloor][(int) $yFloor])) {
             $points['height'][(int) $xFloor][(int) $yFloor] = $z1 + $i * $zdiff;
             $points['coverage'][(int) $xFloor][(int) $yFloor] = (1 - $xOffset) * (1 - $yOffset);
         } else {
             $points['coverage'][(int) $xFloor][(int) $yFloor] += (1 - $xOffset) * (1 - $yOffset);
         }
         if (!isset($points['coverage'][(int) $xCeil][(int) $yCeil])) {
             $points['height'][(int) $xCeil][(int) $yCeil] = $z1 + $i * $zdiff;
             $points['coverage'][(int) $xCeil][(int) $yCeil] = $xOffset * $yOffset;
         } else {
             $points['coverage'][(int) $xCeil][(int) $yCeil] += $xOffset * $yOffset;
         }
         if (!isset($points['coverage'][(int) $xCeil][(int) $yFloor])) {
             $points['height'][(int) $xCeil][(int) $yFloor] = $z1 + $i * $zdiff;
             $points['coverage'][(int) $xCeil][(int) $yFloor] = $xOffset * (1 - $yOffset);
         } else {
             $points['coverage'][(int) $xCeil][(int) $yFloor] += $xOffset * (1 - $yOffset);
         }
     }
     return $points;
 }