[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]