Time for an 2014 update…
This commit is contained in:
parent
372c577f83
commit
09687c4926
2520 changed files with 34227 additions and 7318 deletions
|
|
@ -1,44 +1,44 @@
|
|||
void Line( const float x1, const float y1, const float x2, const float y2, const Color& color )
|
||||
{
|
||||
// Bresenham's line algorithm
|
||||
const bool steep = (fabs(y2 - y1) > fabs(x2 - x1));
|
||||
if(steep)
|
||||
{
|
||||
std::swap(x1, y1);
|
||||
std::swap(x2, y2);
|
||||
}
|
||||
const bool steep = (fabs(y2 - y1) > fabs(x2 - x1));
|
||||
if(steep)
|
||||
{
|
||||
std::swap(x1, y1);
|
||||
std::swap(x2, y2);
|
||||
}
|
||||
|
||||
if(x1 > x2)
|
||||
{
|
||||
std::swap(x1, x2);
|
||||
std::swap(y1, y2);
|
||||
}
|
||||
if(x1 > x2)
|
||||
{
|
||||
std::swap(x1, x2);
|
||||
std::swap(y1, y2);
|
||||
}
|
||||
|
||||
const float dx = x2 - x1;
|
||||
const float dy = fabs(y2 - y1);
|
||||
|
||||
float error = dx / 2.0f;
|
||||
const int ystep = (y1 < y2) ? 1 : -1;
|
||||
int y = (int)y1;
|
||||
const float dx = x2 - x1;
|
||||
const float dy = fabs(y2 - y1);
|
||||
|
||||
const int maxX = (int)x2;
|
||||
float error = dx / 2.0f;
|
||||
const int ystep = (y1 < y2) ? 1 : -1;
|
||||
int y = (int)y1;
|
||||
|
||||
for(int x=(int)x1; x<maxX; x++)
|
||||
{
|
||||
if(steep)
|
||||
const int maxX = (int)x2;
|
||||
|
||||
for(int x=(int)x1; x<maxX; x++)
|
||||
{
|
||||
if(steep)
|
||||
{
|
||||
SetPixel(y,x, color);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
SetPixel(x,y, color);
|
||||
}
|
||||
|
||||
error -= dy;
|
||||
if(error < 0)
|
||||
{
|
||||
y += ystep;
|
||||
error += dx;
|
||||
}
|
||||
}
|
||||
if(error < 0)
|
||||
{
|
||||
y += ystep;
|
||||
error += dx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,22 +2,22 @@
|
|||
"Draw a line from x1,y1 to x2,y2 using Bresenham's, to a java BufferedImage in the colour of pixel."
|
||||
[buffer x1 y1 x2 y2 pixel]
|
||||
(let [dist-x (abs (- x1 x2))
|
||||
dist-y (abs (- y1 y2))
|
||||
steep (> dist-y dist-x)]
|
||||
dist-y (abs (- y1 y2))
|
||||
steep (> dist-y dist-x)]
|
||||
(let [[x1 y1 x2 y2] (if steep [y1 x1 y2 x2] [x1 y1 x2 y2])]
|
||||
(let [[x1 y1 x2 y2] (if (> x1 x2) [x2 y2 x1 y1] [x1 y1 x2 y2])]
|
||||
(let [delta-x (- x2 x1)
|
||||
delta-y (abs (- y1 y2))
|
||||
y-step (if (< y1 y2) 1 -1)]
|
||||
(let [delta-x (- x2 x1)
|
||||
delta-y (abs (- y1 y2))
|
||||
y-step (if (< y1 y2) 1 -1)]
|
||||
|
||||
(let [plot (if steep
|
||||
#(.setRGB buffer (int %1) (int %2) pixel)
|
||||
#(.setRGB buffer (int %2) (int %1) pixel))]
|
||||
|
||||
(loop [x x1 y y1 error (floor delta-x 2) ]
|
||||
(plot x y)
|
||||
(if (< x x2)
|
||||
; Rather then rebind error, test that it is less than delta-y rather than zero
|
||||
(if (< error delta-y)
|
||||
(recur (inc x) (+ y y-step) (+ error (- delta-x delta-y)))
|
||||
(recur (inc x) y (- error delta-y)))))))))))
|
||||
(let [plot (if steep
|
||||
#(.setRGB buffer (int %1) (int %2) pixel)
|
||||
#(.setRGB buffer (int %2) (int %1) pixel))]
|
||||
|
||||
(loop [x x1 y y1 error (floor delta-x 2) ]
|
||||
(plot x y)
|
||||
(if (< x x2)
|
||||
; Rather then rebind error, test that it is less than delta-y rather than zero
|
||||
(if (< error delta-y)
|
||||
(recur (inc x) (+ y y-step) (+ error (- delta-x delta-y)))
|
||||
(recur (inc x) y (- error delta-y)))))))))))
|
||||
|
|
|
|||
|
|
@ -3,26 +3,26 @@
|
|||
(declare (type integer x1 y1 x2 y2))
|
||||
(declare (type rgb-pixel pixel))
|
||||
(let* ((dist-x (abs (- x1 x2)))
|
||||
(dist-y (abs (- y1 y2)))
|
||||
(steep (> dist-y dist-x)))
|
||||
(dist-y (abs (- y1 y2)))
|
||||
(steep (> dist-y dist-x)))
|
||||
(when steep
|
||||
(psetf x1 y1 y1 x1
|
||||
x2 y2 y2 x2))
|
||||
x2 y2 y2 x2))
|
||||
(when (> x1 x2)
|
||||
(psetf x1 x2 x2 x1
|
||||
y1 y2 y2 y1))
|
||||
y1 y2 y2 y1))
|
||||
(let* ((delta-x (- x2 x1))
|
||||
(delta-y (abs (- y1 y2)))
|
||||
(error (floor delta-x 2))
|
||||
(y-step (if (< y1 y2) 1 -1))
|
||||
(y y1))
|
||||
(delta-y (abs (- y1 y2)))
|
||||
(error (floor delta-x 2))
|
||||
(y-step (if (< y1 y2) 1 -1))
|
||||
(y y1))
|
||||
(loop
|
||||
:for x :upfrom x1 :to x2
|
||||
:do (progn (if steep
|
||||
(setf (rgb-pixel buffer x y) pixel)
|
||||
(setf (rgb-pixel buffer y x) pixel))
|
||||
(setf error (- error delta-y))
|
||||
(when (< error 0)
|
||||
(incf y y-step)
|
||||
(incf error delta-x)))))
|
||||
:for x :upfrom x1 :to x2
|
||||
:do (progn (if steep
|
||||
(setf (rgb-pixel buffer x y) pixel)
|
||||
(setf (rgb-pixel buffer y x) pixel))
|
||||
(setf error (- error delta-y))
|
||||
(when (< error 0)
|
||||
(incf y y-step)
|
||||
(incf error delta-x)))))
|
||||
buffer))
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
build_path({Sx, Sy}, {Tx, Ty}) ->
|
||||
if
|
||||
Tx < Sx -> StepX = -1;
|
||||
true -> StepX = 1
|
||||
end,
|
||||
if
|
||||
Ty < Sy -> StepY = -1;
|
||||
true -> StepY = 1
|
||||
end,
|
||||
|
||||
Dx = abs((Tx-Sx)*2),
|
||||
Dy = abs((Ty-Sy)*2),
|
||||
|
||||
if
|
||||
Dy > Dx -> Path = through_y({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, Dx*2-Dy, []);
|
||||
true -> Path = through_x({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, Dy*2-Dx, [])
|
||||
end,
|
||||
|
||||
lists:reverse(Path).
|
||||
if
|
||||
Tx < Sx -> StepX = -1;
|
||||
true -> StepX = 1
|
||||
end,
|
||||
if
|
||||
Ty < Sy -> StepY = -1;
|
||||
true -> StepY = 1
|
||||
end,
|
||||
|
||||
Dx = abs((Tx-Sx)*2),
|
||||
Dy = abs((Ty-Sy)*2),
|
||||
|
||||
if
|
||||
Dy > Dx -> Path = through_y({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, Dx*2-Dy, []);
|
||||
true -> Path = through_x({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, Dy*2-Dx, [])
|
||||
end,
|
||||
|
||||
lists:reverse(Path).
|
||||
|
||||
through_x({Tx, _}, {Tx, _}, _, _, _, P) -> P;
|
||||
through_x({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F0, P) when F0 >= 0 ->
|
||||
Ny = Sy + StepY,
|
||||
F1 = F0 - Dx,
|
||||
Nx = Sx + StepX,
|
||||
Ny = Sy + StepY,
|
||||
F1 = F0 - Dx,
|
||||
Nx = Sx + StepX,
|
||||
F2 = F1 + Dy,
|
||||
through_x({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]);
|
||||
through_x({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]);
|
||||
through_x({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F0, P) when F0 < 0 ->
|
||||
Ny = Sy,
|
||||
Nx = Sx + StepX,
|
||||
Ny = Sy,
|
||||
Nx = Sx + StepX,
|
||||
F2 = F0 + Dy,
|
||||
through_x({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]).
|
||||
through_x({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]).
|
||||
|
||||
through_y({_, Ty}, {_, Ty}, _, _, _, P) -> P;
|
||||
through_y({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F0, P) when F0 >= 0 ->
|
||||
Nx = Sx + StepX,
|
||||
F1 = F0 - Dy,
|
||||
Ny = Sy + StepY,
|
||||
Nx = Sx + StepX,
|
||||
F1 = F0 - Dy,
|
||||
Ny = Sy + StepY,
|
||||
F2 = F1 + Dx,
|
||||
through_y({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]);
|
||||
through_y({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]);
|
||||
through_y({Sx, Sy}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F0, P) when F0 < 0 ->
|
||||
Nx = Sx,
|
||||
Ny = Sy + StepY,
|
||||
Nx = Sx,
|
||||
Ny = Sy + StepY,
|
||||
F2 = F0 + Dx,
|
||||
through_y({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]).
|
||||
through_y({Nx, Ny}, {Tx, Ty}, {StepX, StepY}, {Dx, Dy}, F2, [{Nx, Ny}|P]).
|
||||
|
|
|
|||
|
|
@ -1,30 +1,30 @@
|
|||
line({X0, Y0}, {X1, Y1}) ->
|
||||
SX = step(X0, X1),
|
||||
SY = step(Y0, Y1),
|
||||
DX = abs(X1 - X0),
|
||||
DY = abs(Y1 - Y0),
|
||||
Err = DX - DY,
|
||||
line({X0, Y0}, {X1, Y1}, {SX, SY}, {DX, DY}, Err, []).
|
||||
|
||||
SX = step(X0, X1),
|
||||
SY = step(Y0, Y1),
|
||||
DX = abs(X1 - X0),
|
||||
DY = abs(Y1 - Y0),
|
||||
Err = DX - DY,
|
||||
line({X0, Y0}, {X1, Y1}, {SX, SY}, {DX, DY}, Err, []).
|
||||
|
||||
line({X1, Y1}, {X1, Y1}, _, _, _, Acc) ->
|
||||
lists:reverse([{X1, Y1} | Acc]);
|
||||
lists:reverse([{X1, Y1} | Acc]);
|
||||
line({X, Y}, {X1, Y1}, {SX, SY}, {DX, DY}, Err, Acc) ->
|
||||
DE = 2 * Err,
|
||||
{X0, Err0} = next_x(X, SX, DY, Err, DE),
|
||||
{Y0, Err1} = next_y(Y, SY, DX, Err0, DE),
|
||||
line({X0, Y0}, {X1, Y1}, {SX, SY}, {DX, DY}, Err1, [{X, Y} | Acc]).
|
||||
|
||||
DE = 2 * Err,
|
||||
{X0, Err0} = next_x(X, SX, DY, Err, DE),
|
||||
{Y0, Err1} = next_y(Y, SY, DX, Err0, DE),
|
||||
line({X0, Y0}, {X1, Y1}, {SX, SY}, {DX, DY}, Err1, [{X, Y} | Acc]).
|
||||
|
||||
step(P0, P1) when P0 < P1 ->
|
||||
1;
|
||||
1;
|
||||
step(_, _) ->
|
||||
-1.
|
||||
|
||||
-1.
|
||||
|
||||
next_x(X, SX, DY, E, DE) when DE > -DY ->
|
||||
{X + SX, E - DY};
|
||||
{X + SX, E - DY};
|
||||
next_x(X, _SX, _DY, E, _DE) ->
|
||||
{X, E}.
|
||||
{X, E}.
|
||||
|
||||
next_y(Y, SY, DX, E, DE) when DE < DX ->
|
||||
{Y + SY, E + DX};
|
||||
{Y + SY, E + DX};
|
||||
next_y(Y, _SY, _DX, E, _DE) ->
|
||||
{Y, E}.
|
||||
{Y, E}.
|
||||
|
|
|
|||
|
|
@ -11,25 +11,25 @@ CENTER(ME)
|
|||
SHOW(ME)
|
||||
|
||||
BEGIN EVENTS
|
||||
SELECT CASE CBMSG
|
||||
CASE WM_LBUTTONDOWN: Rhombus() ' Draw
|
||||
CASE WM_CLOSE: FBSL.RELEASEDC(ME, FBSL.GETDC) ' Clean up
|
||||
END SELECT
|
||||
SELECT CASE CBMSG
|
||||
CASE WM_LBUTTONDOWN: Rhombus() ' Draw
|
||||
CASE WM_CLOSE: FBSL.RELEASEDC(ME, FBSL.GETDC) ' Clean up
|
||||
END SELECT
|
||||
END EVENTS
|
||||
|
||||
SUB Rhombus()
|
||||
Bresenham(50, 100, 100, 190)(100, 190, 150, 100)(150, 100, 100, 10)(100, 10, 50, 100)
|
||||
|
||||
SUB Bresenham(x0, y0, x1, y1)
|
||||
DIM dx = ABS(x0 - x1), sx = SGN(x0 - x1)
|
||||
DIM dy = ABS(y0 - y1), sy = SGN(y0 - y1)
|
||||
DIM tmp, er = IIF(dx > dy, dx, -dy) / 2
|
||||
|
||||
WHILE NOT (x0 = x1 ANDALSO y0 = y1)
|
||||
PSET(FBSL.GETDC, x0, y0, &HFF) ' Red: Windows stores colors in BGR order
|
||||
tmp = er
|
||||
IF tmp > -dx THEN: er = er - dy: x0 = x0 + sx: END IF
|
||||
IF tmp < +dy THEN: er = er + dx: y0 = y0 + sy: END IF
|
||||
WEND
|
||||
END SUB
|
||||
Bresenham(50, 100, 100, 190)(100, 190, 150, 100)(150, 100, 100, 10)(100, 10, 50, 100)
|
||||
|
||||
SUB Bresenham(x0, y0, x1, y1)
|
||||
DIM dx = ABS(x0 - x1), sx = SGN(x0 - x1)
|
||||
DIM dy = ABS(y0 - y1), sy = SGN(y0 - y1)
|
||||
DIM tmp, er = IIF(dx > dy, dx, -dy) / 2
|
||||
|
||||
WHILE NOT (x0 = x1 ANDALSO y0 = y1)
|
||||
PSET(FBSL.GETDC, x0, y0, &HFF) ' Red: Windows stores colors in BGR order
|
||||
tmp = er
|
||||
IF tmp > -dx THEN: er = er - dy: x0 = x0 + sx: END IF
|
||||
IF tmp < +dy THEN: er = er + dx: y0 = y0 + sy: END IF
|
||||
WEND
|
||||
END SUB
|
||||
END SUB
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ defer ystep \ 1+ or 1-
|
|||
( x0 x1 y0 y1 )
|
||||
2dup - abs >r
|
||||
2over - abs r> <
|
||||
if ['] swap \ swap use of x and y
|
||||
if ['] swap \ swap use of x and y
|
||||
else 2swap ['] noop
|
||||
then is steep
|
||||
( y0 y1 x0 x1 )
|
||||
2dup >
|
||||
if swap 2swap swap \ ensure x1 > x0
|
||||
if swap 2swap swap \ ensure x1 > x0
|
||||
else 2swap
|
||||
then
|
||||
( x0 x1 y0 y1 )
|
||||
|
|
|
|||
|
|
@ -10,30 +10,30 @@ fn plot img coord steep col =
|
|||
fn drawLine img start end col =
|
||||
(
|
||||
local steep = (abs (end.y - start.y)) > (abs (end.x - start.x))
|
||||
|
||||
|
||||
if steep then
|
||||
(
|
||||
swap start.x start.y
|
||||
swap end.x end.y
|
||||
)
|
||||
|
||||
|
||||
if start.x > end.x then
|
||||
(
|
||||
swap start.x end.x
|
||||
swap start.y end.y
|
||||
)
|
||||
|
||||
|
||||
local deltaX = end.x - start.x
|
||||
local deltaY = abs (end.y - start.y)
|
||||
local error = deltaX / 2.0
|
||||
local yStep = -1
|
||||
local y = start.y
|
||||
|
||||
|
||||
if start.y < end.y then
|
||||
(
|
||||
yStep = 1
|
||||
)
|
||||
|
||||
|
||||
for x in start.x to end.x do
|
||||
(
|
||||
plot img [x, y] steep col
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ sub my_draw_line
|
|||
|
||||
my $steep = (abs($y1 - $y0) > abs($x1 - $x0));
|
||||
if ( $steep ) {
|
||||
( $y0, $x0 ) = ( $x0, $y0);
|
||||
( $y1, $x1 ) = ( $x1, $y1 );
|
||||
( $y0, $x0 ) = ( $x0, $y0);
|
||||
( $y1, $x1 ) = ( $x1, $y1 );
|
||||
}
|
||||
if ( $x0 > $x1 ) {
|
||||
( $x1, $x0 ) = ( $x0, $x1 );
|
||||
( $y1, $y0 ) = ( $y0, $y1 );
|
||||
( $x1, $x0 ) = ( $x0, $x1 );
|
||||
( $y1, $y0 ) = ( $y0, $y1 );
|
||||
}
|
||||
my $deltax = $x1 - $x0;
|
||||
my $deltay = abs($y1 - $y0);
|
||||
|
|
@ -23,16 +23,16 @@ sub my_draw_line
|
|||
my $x;
|
||||
$ystep = ( $y0 < $y1 ) ? 1 : -1;
|
||||
for( $x = $x0; $x <= $x1; $x += 1 ) {
|
||||
if ( $steep ) {
|
||||
$img->draw_point($y, $x);
|
||||
} else {
|
||||
$img->draw_point($x, $y);
|
||||
}
|
||||
$error -= $deltay;
|
||||
if ( $error < 0 ) {
|
||||
$y += $ystep;
|
||||
$error += $deltax;
|
||||
}
|
||||
if ( $steep ) {
|
||||
$img->draw_point($y, $x);
|
||||
} else {
|
||||
$img->draw_point($x, $y);
|
||||
}
|
||||
$error -= $deltay;
|
||||
if ( $error < 0 ) {
|
||||
$y += $ystep;
|
||||
$error += $deltax;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,34 +2,34 @@ SUB draw_line(x1, y1, x2, y2, colour)
|
|||
x_dist = abs(x2-x1)
|
||||
y_dist = abs(y2-y1)
|
||||
IF y2-y1 < -x_dist OR x2-x1 <= -y_dist THEN
|
||||
SWAP x1, x2 ' Swap start and end points
|
||||
SWAP y1, y2
|
||||
SWAP x1, x2 ' Swap start and end points
|
||||
SWAP y1, y2
|
||||
END IF
|
||||
IF x1 < x2 THEN x_step = 1 ELSE x_step = -1
|
||||
IF y1 < y2 THEN y_step = 1 ELSE y_step = -1
|
||||
|
||||
IF y_dist > x_dist THEN ' steep angle, step by y
|
||||
error = y_dist/2
|
||||
x = x1
|
||||
FOR y = y1 TO y2
|
||||
canvas.Pset(x, y, colour)
|
||||
error = error - x_dist
|
||||
IF error < 0 THEN
|
||||
x = x + x_step
|
||||
error = error + y_dist
|
||||
END IF
|
||||
NEXT y
|
||||
ELSE ' not steep, step by x
|
||||
IF y_dist > x_dist THEN ' steep angle, step by y
|
||||
error = y_dist/2
|
||||
x = x1
|
||||
FOR y = y1 TO y2
|
||||
canvas.Pset(x, y, colour)
|
||||
error = error - x_dist
|
||||
IF error < 0 THEN
|
||||
x = x + x_step
|
||||
error = error + y_dist
|
||||
END IF
|
||||
NEXT y
|
||||
ELSE ' not steep, step by x
|
||||
error = x_dist/2
|
||||
y = y1
|
||||
FOR x = x1 TO x2
|
||||
canvas.Pset(x, y, colour)
|
||||
error = error - y_dist
|
||||
IF error < 0 THEN
|
||||
y = y + y_step
|
||||
error = error + x_dist
|
||||
END IF
|
||||
NEXT y
|
||||
y = y1
|
||||
FOR x = x1 TO x2
|
||||
canvas.Pset(x, y, colour)
|
||||
error = error - y_dist
|
||||
IF error < 0 THEN
|
||||
y = y + y_step
|
||||
error = error + x_dist
|
||||
END IF
|
||||
NEXT y
|
||||
END IF
|
||||
|
||||
END SUB
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@ object BitmapOps {
|
|||
}
|
||||
|
||||
for((x,y) <- it)
|
||||
bm.setPixel(x, y, c)
|
||||
bm.setPixel(x, y, c)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,36 +3,36 @@
|
|||
|
||||
:DRAW_LINE:
|
||||
Num_Push(31,35)
|
||||
#31 = abs(#3-#1) // x distance
|
||||
#32 = abs(#4-#2) // y distance
|
||||
#31 = abs(#3-#1) // x distance
|
||||
#32 = abs(#4-#2) // y distance
|
||||
if (#4-#2 < -#31 || #3-#1 <= -#32) {
|
||||
#99=#1; #1=#3; #3=#99 // swap start and end points
|
||||
#99=#1; #1=#3; #3=#99 // swap start and end points
|
||||
#99=#2; #2=#4; #4=#99
|
||||
}
|
||||
if (#1 < #3) { #34=1 } else { #34=-1 } // x step
|
||||
if (#2 < #4) { #35=1 } else { #35=-1 } // y step
|
||||
if (#1 < #3) { #34=1 } else { #34=-1 } // x step
|
||||
if (#2 < #4) { #35=1 } else { #35=-1 } // y step
|
||||
|
||||
if (#32 > #31) { // steep angle, step by Y
|
||||
#33 = #32 / 2 // error distance
|
||||
if (#32 > #31) { // steep angle, step by Y
|
||||
#33 = #32 / 2 // error distance
|
||||
while (#2 <= #4) {
|
||||
Call("DRAW_PIXEL")
|
||||
#33 -= #31
|
||||
if (#33 < 0) {
|
||||
#1 += #34 // move right
|
||||
#33 += #32
|
||||
}
|
||||
#2++ // move up
|
||||
Call("DRAW_PIXEL")
|
||||
#33 -= #31
|
||||
if (#33 < 0) {
|
||||
#1 += #34 // move right
|
||||
#33 += #32
|
||||
}
|
||||
#2++ // move up
|
||||
}
|
||||
} else { // not steep, step by X
|
||||
} else { // not steep, step by X
|
||||
#33 = #31 / 2
|
||||
while (#1 <= #3) {
|
||||
Call("DRAW_PIXEL")
|
||||
#33 -= #32
|
||||
if (#33 < 0) {
|
||||
#2 += #35 // move up
|
||||
#33 += #31
|
||||
}
|
||||
#1++ // move right
|
||||
Call("DRAW_PIXEL")
|
||||
#33 -= #32
|
||||
if (#33 < 0) {
|
||||
#2 += #35 // move up
|
||||
#33 += #31
|
||||
}
|
||||
#1++ // move right
|
||||
}
|
||||
}
|
||||
Num_Pop(31,35)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue