Показать сообщение отдельно
Старый 17.10.2007, 14:21   #6
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Re: Проверка нахождения точки в прямоугольнике

алгоритм для н-угольника (вершины все сперва ручками трансформируем... ну или в функции как вариант =)
// 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;
}
думаю перевести в бейсик не трудно будет =) могу и на картинках показать суть алгоритма =)
(Offline)
 
Ответить с цитированием