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