Haaf's Game EngineСтатьи

Отрисовка углового сектора текстуры (2 стр)

Автор:

Далее - функция проверки на пересечения:

//---------------------------------------------------------------------------
CROSS_RESULT Crossing(   hgeVector p11, hgeVector p12,   // координаты первого отрезка
    hgeVector p21, hgeVector p22 )  // координаты второго отрезка
{

 CROSS_RESULT result;

    memset( (void*)&result, 0, sizeof(result) );

    // знаменатель
    double Z  = (p12.y-p11.y)*(p21.x-p22.x)-(p21.y-p22.y)*(p12.x-p11.x);
    // числитель 1
    double Ca = (p12.y-p11.y)*(p21.x-p11.x)-(p21.y-p11.y)*(p12.x-p11.x);
    // числитель 2
    double Cb = (p21.y-p11.y)*(p21.x-p22.x)-(p21.y-p22.y)*(p21.x-p11.x);

    // если числители и знаменатель = 0, прямые совпадают
    if( (Z == 0)&&(Ca == 0)&&(Cb == 0) )
    {
        result.type = ctSameLine;
        return result;
    }


    // если знаменатель = 0, прямые параллельны
    if( Z == 0 )
    {
        result.type = ctParallel;
        return result;
    }


    double Ua = Ca/Z;
    double Ub = Cb/Z;

    result.pt.x = p11.x + (p12.x - p11.x) * Ub;
    result.pt.y = p11.y + (p12.y - p11.y) * Ub;

    // если 0<=Ua<=1 и 0<=Ub<=1, точка пересечения в пределах отрезков
    if( (0 <= Ua)&&(Ua <= 1)&&(0 <= Ub)&&(Ub <= 1) )
    {
        ( (Ua == 0)||(Ua == 1)||(Ub == 0)||(Ub == 1) ) ?
            result.type = ctOnBounds :
            result.type = ctInBounds;
    }
    // иначе точка пересечения за пределами отрезков
    else
    {
        result.type = ctOutBounds;
    }

    return result;

}
//---------------------------------------------------------------------------
Страницы: 1 2 3 4 Следующая »

2 января 2011

Комментарии [6]