diff options
Diffstat (limited to 'algorithm.mod/algorithm.bmx')
-rw-r--r-- | algorithm.mod/algorithm.bmx | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/algorithm.mod/algorithm.bmx b/algorithm.mod/algorithm.bmx index 1cac89f..378edab 100644 --- a/algorithm.mod/algorithm.bmx +++ b/algorithm.mod/algorithm.bmx @@ -74,6 +74,23 @@ Type TAlgoPoint3D End Type Rem +bbdoc: Rotates a point. +returns: The rotated point. +about: @x, @y are rotated around 0,0 by @angle, which is the value in degrees multiplied by ten. +about: To speed things up a simple 3600 element lookup table is used, so @angle <u>must</u> be 0 to 3599 inclusive, or a runtime error will result. +EndRem +Function DoRotate:TAlgoPoint(x:Int, y:Int, angle:Int) + AlgoStatic.Init() + + Local dx:Double=x + Local dy:Double=y + Local dco:Double=AlgoStatic.co[angle] + Local dsi:Double=algoStatic.si[angle] + + Return TAlgoPoint.Create(dco*dx+(-dsi)*dy,dsi*dx+dco*dy) +End Function + +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. @@ -162,7 +179,7 @@ Function DoCircle:TAlgoPoint[](x:Int, y:Int, r:Int) AlgoStatic.Init() For f=0 To 359 - p[f]=TAlgoPoint.Create(x+r*AlgoStatic.si[f],y+r*AlgoStatic.co[f]) + p[f]=TAlgoPoint.Create(x+r*AlgoStatic.si[f*10],y+r*AlgoStatic.co[f*10]) Next Return p @@ -226,10 +243,10 @@ Type AlgoStatic Function Init() If Not done - si=New Double[360] - co=New Double[360] + si=New Double[3600] + co=New Double[3600] - For Local f:Int=0 To 359 + For Local f:Int=0 To 3599 si[f]=Sin(f) co[f]=Cos(f) Next |