Code and KML for partial UK polygon.
{{code:smalluk.jpg|}}
coordinate cutdownpoly[17] =
{ // Latitude,Longtitude
53.166F,-2.166F, // 0 15K N Stoke-On-Trent (datum)
53.166F,-0.1F, // 1 30K W Skegness (125K east of datum)
52.833F,-0.1F, // 2 5Km N Spalding
52.7F,0.333F, // 3 5Km SW Kings Lynn
52.87F,0.7F, // 4
52.833F,1.25F, // 5
52.666F,1.5F, // 6
52.416F,1.5F, // 7
52.083F,1.166F, // 8 Westerfield N of Ipswitch
51.666F,0.3F, // 9 5Km N of Brentwood
51.666F,-0.666F, // 10 10K NW High Wycombe
51.166F,-0.666F, // 11 Godalming
51.166F,-2.166F, // 12 Warminster
52.333F,-2.166F, // 13
52.333F,-1.666F, // 14
52.666F,-1.666F, // 15
52.666F,-2.166F, // 16
};
Small UK
absolute
-2.166,53.166
-0.1,53.166
-0.1,52.833
0.333,52.7
0.7,52.87
1.25,52.833
1.5,52.666
1.5,52.416
1.166,52.083
0.3,51.666
-0.666,51.666
-0.666,51.166
-2.166,51.166
-2.166,52.333
-1.666,52.333
-1.666,52.666
-2.166,52.666
====== C ======
A C function to test if a point (x, y) is inside a polygon (poly, points). Returns 0 if outside, !0 if inside the polygon. poly points to an array of x, y coordinates of the polygon. points is the number of points in the array.
int pointinpoly(float *poly, int points, float x, float y)
{
float *p = poly;
float *l = &poly[points * 2 - 2];
int c = 0;
for(; points; points--, l = p, p += 2)
{
if(y < p[1] && y < l[1]) continue;
if(y >= p[1] && y >= l[1]) continue;
if(x < p[0] + (l[0] - p[0]) * (y - p[1]) / (l[1] - p[1])) continue;
c = !c;
}
return(c);
}