WatchGuard acquires Percipient Networks to extend protection to the DNS layer, further increasing the value of Total Security Suite. Learn more about what this means for you and how you can improve your security with WatchGuard today!

Hi.

I know I should be able to do this, but I'm old and I've forgotten.

The issue is that SQL Server 2008 doesn't support a circle in its geospatial data type (as far as I can tell - still waiting on my Dev Ed).

So, I need to create an n-sided polygon that covers the same area as a circle of the same radius.

I'm using Google Maps to show this to TPTB within the company (I'm on a learning exercise, so having a LOT of fun).

Currently, I have the following code:

This creates an n-sided closed polygon whose points lie on a circle of the same radius - you can see this in action at n-sided polygon fits inside circle.

What I would like is actually 2 fold.

1 - To calculate the path of an n-sided polygon so that the circle fits inside the polygon (just like the existing polygon fits inside the circle)

2 - To calculate the path of an n-sided polygon so that the area of the circle and the polygon are the same.

Don't worry about the coding, if you have issues with that, just the maths required will be enough for me.

I'm guessing that all I really need is to adjust the meters/miles conversion as this is all that actually alters the side the polygon.

Regards,

Richard Quadling.

P.S. I'm using Google Chrome V10, so the sliders are not going to be visible in older browsers - simply enter the number and tab off the input seems to work OK for IE/FF. This is just a test script, so not an important issue.

I know I should be able to do this, but I'm old and I've forgotten.

The issue is that SQL Server 2008 doesn't support a circle in its geospatial data type (as far as I can tell - still waiting on my Dev Ed).

So, I need to create an n-sided polygon that covers the same area as a circle of the same radius.

I'm using Google Maps to show this to TPTB within the company (I'm on a learning exercise, so having a LOT of fun).

Currently, I have the following code:

```
fn_makePolygon = function(map, polygon, i_Points, i_Radius)
{
// Using the geometry library, calculate an array of points for the polygon
var a_Path = [];
var ll_Centre = map.getCenter();
var f_Angle = 360 / i_Points;
var f_Distance = i_Radius * 1609.344; // Meters to miles conversion.
for(var i_Point = 0 ; i_Point <= i_Points ; ++i_Point)
{
a_Path.push
(
google.maps.geometry.spherical.computeOffset
(
ll_Centre,
f_Distance,
i_Point * f_Angle
)
);
}
polygon.setPath(a_Path);
}
```

This creates an n-sided closed polygon whose points lie on a circle of the same radius - you can see this in action at n-sided polygon fits inside circle.

What I would like is actually 2 fold.

1 - To calculate the path of an n-sided polygon so that the circle fits inside the polygon (just like the existing polygon fits inside the circle)

2 - To calculate the path of an n-sided polygon so that the area of the circle and the polygon are the same.

Don't worry about the coding, if you have issues with that, just the maths required will be enough for me.

I'm guessing that all I really need is to adjust the meters/miles conversion as this is all that actually alters the side the polygon.

Regards,

Richard Quadling.

P.S. I'm using Google Chrome V10, so the sliders are not going to be visible in older browsers - simply enter the number and tab off the input seems to work OK for IE/FF. This is just a test script, so not an important issue.

the area of a regular n-gon with distance from centre to vertex x is

nx^2 sin (360 / 2n) cos(360 /2n)

so if you had a circle radius R, the radius r of an n-gon with the same area would be

nr^2 sin (360 / 2n) cos(360 /2n) = pi R^2

r = sqrt(pi R^2 / [nsin (360 / 2n) cos(360 /2n) ])

http://www.calculatorsoup.com/calculators/geometry-plane/polygon.php

http://www.mathopenref.com/polygonregulararea.html

I've got the following formula working ...

polygon_radius = sqrt( (pi * circle_radius^2 * 2) / (polygon_sides * SIN(360/polygon_sides) )

and in Javascript ...

var f_Distance = 1609.344 * Math.sqrt( (2 * Math.PI * i_Radius * i_Radius) / (i_Points * Math.sin(2 * Math.PI / i_Points) ) );

as Google Maps wants the value in meters and my users think in miles (as do the drivers).

Thank you all. Extremely useful comments.

Richard.

All Courses

From novice to tech pro — start learning today.

Given a circumradius c (distance from center to vertex) the area is

nc^2sin(360/n)/2

So if the circle's area is A then you want to make your vertices

sqrt(2A/nsin(360/n))

from the center.

To circumscribe the polygon around the circle, you want the apothem a (distance from center to closest point on edge) to be the same as the radius of the circle so you want the vertices to be

r sec(180/n)

from the center (where r is the radius of the circle and sec(180/n)=1/cos(180/n)