Пересечение луча с окружностью



Дан луч и окружность.
Необходимо найти точки, принадлежащие и лучу и окружности одновременно.

    Находим точки пересечения прямой, проходящей через луч, с окружностью. Искомыми будут только те из них, которые принадлежат лучу.


Листинг C++

int cross_ray_circle (point p, point t, circle c, point &p1, point &p2)
{
    // пересекаем прямую луча с окружностью
    line l = toline (p, t);
    int flag = cross_line_circle (l, c, p1, p2);
    if (flag == 0) return 0;

    // если точки пересечения есть, то проверяем их на принадлежность лучу
    // если точка одна
    if (flag == 1)
        if (point_in_ray (p1, p, t))
            return 1;
        else
            return 0;

    // если точки две
    bool b1 = point_in_ray (p1, p, t);
    bool b2 = point_in_ray (p2, p, t);

    if (b1)
        if (b2)
            return 2;
        else
            return 1;
    else
        if (b2)
        {
            p1 = p2;
            return 1;
        }
        else
            return 0;
}

15:00
20.07.2009



По всем вопросам обращаться: rumterg@gmail.com