**[**Back to GRAPHICS SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**

*{
> I used something like this:
> for x := 1 to 100 do
> begin
> y := slope*x;
> putpixel(x,y);
> end;
the slope method is a close cousin to bubble-sort an algorithm to use if
you can't be bothered to use a more efficient one for the job.
here's one. that only uses addition and subtraction in it's loop.
(FWIW it's based on the commutativity of multiplication.)
I think It's got some fancy name which I forget, this code is 100% my
own (freeware) and reasonably well tested.
}
***procedure **myline(x1,y1,x2,y2,color:integer);
*{Freeware: my bugs - your problem , 29 dec 1993 J.Betts,
PASCAL echo Fidonet. please keep this notice intact}
***function **sign(x:integer):integer; *{like sgn(x) in basic}
***begin if **x<0 **then **sign:=-1 **else if **x>0 **then **sign:=1 **else **sign:=0 **end**;
**var
**x,y,count,xs,ys,xm,ym:integer;
**begin
**x:=x1;y:=y1;
xs:=x2-x1; ys:=y2-y1;
xm:=sign(xs); ym:=sign(ys);
xs:=abs(xs); ys:=abs(ys);
putpixel(x,y,color);
**if **xs > ys
**then begin ***{flat line <45 deg}
*count:=-(xs **div **2);
**while **(x <> x2 ) **do begin
**count:=count+ys;
x:=x+xm;
**if **count>0 **then begin
**y:=y+ym;
count:=count-xs;
**end**;
putpixel(x,y,color);
**end**;
**end
else begin ***{steep line >=45 deg}
*count:=-(ys **div **2);
**while **(y <> y2 ) **do begin
**count:=count+xs;
y:=y+ym;
**if **count>0 **then begin
**x:=x+xm;
count:=count-ys;
**end**;
putpixel(x,y,color);
**end**;
**end**;
**end**;

**[**Back to GRAPHICS SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**