алгоритм для н-угольника (вершины все сперва ручками трансформируем... ну или в функции как вариант =)
// point - искомая точка
// verts - массив вершин n-угольника
// vertCount - кол-во вершин
bool InsidePolygon(Vector3 point, Vector3 verts[], int vertCount)
{
const float MATCH = 0.99f; //для учета погрешностей вычислений
float angle = 0.0f; // суммарный угол
Vector3 vA; // временные вектора
Vector3 vB;
// цикл по всем вершинам
for(int i = 0; i < vertCount; i++)
{
// высчитываем вектора от искомой точки до текущей вершины
vA = verts[i] - point;
// и от искомой точки до следующей вершины
vB = verts[(i + 1) % vertCount] - point;
// увеличиваем angle на угол между этими векторами
angle += AngleBetweenVectors(vA, vB);
}
// если в сумме угол = 2Pi (+-погрешность) значит точка находится внутри
if(angle >= (MATCH * (2.0f * PI)))
{
return true;
}
return false;
}
думаю перевести в бейсик не трудно будет =) могу и на картинках показать суть алгоритма =)