На java:
Код:
package whitefang.algoritm.geometry;
public class PointInsidePolygon {
public static int abs (int number) {
if (number < 0) return number * (-1);
return number;
}
static int IsPointInsidePolygon (Point[] p, int Number, int x, int y)
{
int i1, i2, n, N, S, S1, S2, S3, flag = 0;
N = Number;
for (n=0; n<N; n++)
{
flag = 0;
i1 = n < N-1 ? n + 1 : 0;
while (flag == 0)
{
i2 = i1 + 1;
if (i2 >= N)
i2 = 0;
if (i2 == (n < N-1 ? n + 1 : 0))
break;
S = abs (p[i1].x * (p[i2].y - p[n ].y) +
p[i2].x * (p[n ].y - p[i1].y) +
p[n].x * (p[i1].y - p[i2].y));
S1 = abs (p[i1].x * (p[i2].y - y) +
p[i2].x * (y - p[i1].y) +
x * (p[i1].y - p[i2].y));
S2 = abs (p[n ].x * (p[i2].y - y) +
p[i2].x * (y - p[n ].y) +
x * (p[n ].y - p[i2].y));
S3 = abs (p[i1].x * (p[n ].y - y) +
p[n ].x * (y - p[i1].y) +
x * (p[i1].y - p[n ].y));
if (S == S1 + S2 + S3)
{
flag = 1;
break;
}
i1 = i1 + 1;
if (i1 >= N)
i1 = 0;
}
if (flag == 0)
break;
}
return flag;
}
public static void main(String[] args) {
Point[] masiv = new Point[3];
Point a = new Point();
a.x = 0;
a.y = 0;
Point b = new Point();
b.x = 1;
b.y = 1;
Point c = new Point();
c.x = 1;
c.y = 2;
masiv[0] = a;
masiv[1] = b;
masiv[2] = c;
System.out.println(IsPointInsidePolygon(masiv, 3, 1, 2));
}
}
class Point {
int x;
int y;
}