viewing: teroMUD - Bresenham's Line Algorithm

  • Time Posted:
    2 months ago
  • Language:
    perl
  • Views
    56
  • Privacy
    Public
sub draw_line {
	my $room = $_[0];
	my $x0 = $_[1];
	my $y0 = $_[2];
	my $x1 = $_[3];
	my $y1 = $_[4];
 
	my $steep = abs($y1 - $y0) > abs($x1 - $x0);
 
	if ($steep) {
		($x0, $y0) = ($y0, $x0);
		($x1, $y1) = ($y1, $x1);
	}
 
	if ($x0 > $x1) {
		($x0, $x1) = ($x1, $x0);
		($y0, $y1) = ($y1, $y0);
	}
 
	my $deltax = $x1 - $x0;
	my $deltay = abs($y1 - $y0);
	my $error = $deltax / 2;
	my $ystep;
 
	my $x;
	my $y = $y0;
 
	if ($y0 < $y1) { $ystep = 1; } else { $ystep = -1; }
 
	for ($x = $x0;$x <= $x1;$x++) {
		my ($cx, $cy);
		if ($steep) {
			$cx = $y;
			$cy = $x;
		} else {
			$cx = $x;
			$cy = $y;
		}
 
		$error = $error - $deltay;
 
		if ($error < 0) {
			$y = $y + $ystep;
			$error = $error + $deltax;
		}
	}
 
	return 1;
}
 

latest pastes