Касательные к окружности (пересечение окружностей)



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

    Найдём расстояния от заданной точки до точек касания. Построим окружность вокруг заданной точки с радиусом, равным расстоянию до точек касания. Точки пересечения полученной окружности с исходной окружностью являются искомыми точками касания.


Листинг C++

// точки касания касательной с окружностью
int contact_points (point p, circle c, point &p1, point &p2)
{
    int flag = point_in_circle (p, c);
    if (flag == 0) return 0;
    if (flag == 1)
    {
        p1 = p;
        return 1;
    }  
    // находим расстояние до точек касания
    double d = dist (p, c.c);
    double k = sqrt (d * d - c.r * c.r);
    return cross_circle (p.x, p.y, k, c.c.x, c.c.y, c.r, p1, p2);
}

17:08
04.08.2009


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