my($x1,$y1, $x2,$y2) = @_; use integer; my($dx, $dy, $incr1, $incr2, $d, $x, $y, $xend, $yend, $xdirfl +ag, $ydirflag); $dx = abs($x2-$x1); $dy = abs($y2-$y1); if ($dy <= $dx) { $d = 2*$dy - $dx; $incr1 = 2*$dy; $incr2 = 2 * ($dy - $dx); if ($x1 > $x2) { $x = $x2; $y = $y2; $ydirflag = (-1); $xend = $x1; } else { $x = $x1; $y = $y1; $ydirflag = 1; $xend = $x2; } set_point($x,$y); if ((($y2 - $y1) * $ydirflag) > 0) { while ($x < $xend) { $x++; if ($d <0) { $d+=$incr1; } else { $y++; $d+=$incr2; } _set_point($x,$y); } } else { while ($x < $xend) { $x++; if ($d <0) { $d+=$incr1; } else { $y--; $d+=$incr2; } set_point($x,$y); } } } else { $d = 2*$dx - $dy; $incr1 = 2 * $dx; $incr2 = 2 * ($dx - $dy); if ($y1 > $y2) { $y = $y2; $x = $x2; $yend = $y1; $xdirflag = (-1); } else { $y = $y1; $x = $x1; $yend = $y2; $xdirflag = 1; } set_point($x,$y); if ((($x2 - $x1) * $xdirflag) > 0) { while ($y < $yend) { $y++; if ($d < 0) { $d+=$incr1; } else { $x++; $d+=$incr2; } set_point($x,$y); } } else { while ($y < $yend) { $y++; if ($d < 0) { $d+=$incr1; } else { $x--; $d+=$incr2; } set_point($x,$y); } }
In reply to Re^2: Draw a line
by eserte
in thread Draw a line
by chiburashka
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |