Касательные к окружности (пересечение окружностей)
Дана окружность и точка.
Необходимо найти точки касания касательных, проведённых к окружности из заданной точки.
Найдём расстояния от заданной точки до точек касания. Построим окружность вокруг заданной точки с радиусом, равным расстоянию до точек касания. Точки пересечения полученной окружности с исходной окружностью являются искомыми точками касания.
Листинг 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