Page 3 of 4
The Polygon function
To draw a regular polygon as a symbol we first need to write a small function that will return the coordinates of the points of the corners of the polygon give its center and "radius".
This is easier to write than you might think, once you know the equation for a circle in polar coordinates:
cx= r*Cos t + + x
cy= r*Sin t + y
which gives a point on the circle of radius r centered on x,y at angle t.
To generate the points of an nsided polygon we simply need to evaluate the formulas for t equal to mulitples of 2Pi/n. For example for a triangle the angle is 2Pi/3:
The only complication is that a XML polygon has two extra requirements. The first is that you have to repeat the first point in its specification as the last point  i.e. to close the figure. The second is that the points have to be listed in a clockwise order.
With these two practicalities in mind we can write the polygon function. First we need to setup some basic variables and constants:
Private Function Polygon( x As Double, y As Double, r As Double, n As Integer) As String Dim Angle As Double Dim Coords As String Coords = "" Angle = 2 * 3.141592654 / n
The number of points to be generated is given by n and the results are to be returned in the Coords string as a set in the format x,y,z with one point to a line.
The first and last points are best generated separately from the rest. The first point is:
px1 = r * Sin(Angle * i) + x py1 = r * Cos(Angle * i) + y Coords = Coords & px1 & "," & py1 & ",0 "
The final line converts the numeric values px1 and py1 into a comma separated string.
Next we use a for loop to generate the rest of the points in the polygon:
For i = 1 To n  1 px = r * Sin(Angle * i) + x py = r * Cos(Angle * i) + y Coords = Coords & px & "," & py & ",0 " Next i
Finally we repeat the first point as the last point and return the result:
Coords = Coords & px1 & "," & py1 & ",0" Polygon = Coords End Function
The complete function is:
Private Function Polygon( x As Double, y As Double, r As Double, n As Integer) As String Dim Angle As Double Dim Coords As String Coords = "" Angle = 2 * 3.141592654 / n
px1 = r * Sin(Angle * i) + x py1 = r * Cos(Angle * i) + y Coords = Coords & px1 & "," & py1 & ",0 "
For i = 1 To n  1 px = r * Sin(Angle * i) + x py = r * Cos(Angle * i) + y Coords = Coords & px & "," & py & ",0 " Next i
Coords = Coords & px1 & "," & py1 & ",0" Polygon = Coords End Function
<ASIN:0470515112>
<ASIN:0470236825>
<ASIN:1430216204>
<ASIN:0596008651>
