diff options
Diffstat (limited to 'algorithm.mod/algorithm.bmx')
-rw-r--r-- | algorithm.mod/algorithm.bmx | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/algorithm.mod/algorithm.bmx b/algorithm.mod/algorithm.bmx new file mode 100644 index 0000000..db68305 --- /dev/null +++ b/algorithm.mod/algorithm.bmx @@ -0,0 +1,118 @@ +Rem +bbdoc: noddybox.algorithm +EndRem +Module noddybox.algorithm + +ModuleInfo "Framework: Various algorithm routines" +ModuleInfo "Copyright: Public Domain" +ModuleInfo "Author: Ian Cowburn" +ModuleInfo "Version: $Revision$" + +' $Id$ + +Strict +Import brl.math +Import brl.linkedlist + +Rem +bbdoc: Used to return points from algorithms. +EndRem +Type TAlgoPoint + Rem + bbdoc: The X co-ordinate of the point + EndRem + Field x:Int + Rem + bbdoc: The Y co-ordinate of the point + EndRem + Field y:Int + + Rem + bbdoc: Create a point. + returns: Newly created point. + about: @x and @y are initialised with the passed parameters. + EndRem + Function Create:TAlgoPoint(x:Int, y:Int) + Local o:TAlgoPoint=New TAlgoPoint + o.x=x + o.y=y + Return o + End Function + +End Type + +Rem +bbdoc: Implements a Bresenham style line. +returns: A list of points making up the line. +about: @px1, @py1, @px2 and @py2 are the end points of the line. +EndRem +Function DoLine:TList(p1x:Int, p1y:Int, p2x:Int, p2y:Int) + Local list:TList=CreateList() + Local f:Int + Local dx:Int + Local dy:Int + Local ix:Int + Local iy:Int + Local incrE:Int + Local incrNE:Int + Local d:Int + Local x:Int + Local y:Int + Local ymode:Int + + dx=p2x-p1x + dy=p2y-p1y + + ix=Sgn(dx) + iy=Sgn(dy) + + dx=Abs(dx) + dy=Abs(dy) + + If dy>dx + ymode=True + d=dx*2-dy + incrE=dx*2 + incrNE=(dx-dy)*2 + Else + ymode=False + d=dy*2-dx + incrE=dy*2 + incrNE=(dy-dx)*2 + EndIf + + x=p1x + y=p1y + + list.AddLast(TAlgoPoint.Create(x,y)) + + If ymode + While y<>p2y + If d<=0 + d:+incrE + y:+iy + Else + d:+incrNE + y:+iy + x:+ix + EndIf + + list.AddLast(TAlgoPoint.Create(x,y)) + Wend + Else + While x<>p2x + If d<=0 + d:+incrE + x:+ix + Else + d:+incrNE + y:+iy + x:+ix + EndIf + + list.AddLast(TAlgoPoint.Create(x,y)) + Wend + EndIf + + Return list +End Function |