Cartesian and Polar Coordinates in Small Basic

I introduced a Small Basic sample code about 2-dimensional vector in my last blog.  A 2-D vector has two elements.  A point in the plane has x coordinate and y coordinate.  This kind of coordinate is called Cartesian coordinates.

Today, I'd like to introduce another coordinate system - polar coordinates.  In polar coordinates, a point is represented with r (the length from the origin) and θ  (the angle between the vector and the x axis).  A sample program TJB764 shows both coordinates.

 

Conversion from polar coordinates to Cartesian coordinates

This is easy.

Small Basic code is as follows.  A variable a means θ above.

x `` = `` r `` * ``Math``.``Cos``(``a``)

y `` = `` r `` * ``Math``.``Sin``(``a``)

Conversion from Cartesian coordinates to polar coodinates

This is basically easy.

Small Basic code is:

Sub ``Math_CartesianToPolar

  ``' Math | convert Cartesian coodinate to polar coordinate

  ``' param x, y - Cartesian coordinate

  ``' return r, a - polar coordinate (0<=a<360)

  `` r `` = ``Math``.``SquareRoot``(`` x `` * `` x `` + `` y `` * ``y``)

  `` If `` x `` = `` 0 `` And `` y `` > `` 0 ``Then

    `` a `` = `` 90 ``' [degree]

  `` ElseIf `` x `` = `` 0 `` And `` y `` < `` 0 ``Then

    `` a `` = ``-``90

  `` ElseIf `` x `` = `` 0 `` Then ``' this condition is needed for SB 1.2

    `` a `` = ``0

  ``Else

    `` a `` = ``Math``.``ArcTan``(`` y `` / ``x`` ) `` * `` 180 `` / ``Math``.``Pi

  ``EndIf

  `` If `` x `` < `` 0 ``Then

    `` a `` = `` a `` + ``180

  `` ElseIf `` x `` > `` 0 `` And `` y `` < `` 0 ``Then

    `` a `` = `` a `` + ``360

  ``EndIf

EndSub

I already wrote about this subroutine in this blog titled Small Basic Game Programming - Game Math.  But the last one causes divide by zero error in Small Basic 1.2.

Math function tan-1 is Math.ArcTan() operation in Small Basic.  The graph of this operation is: