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

Задал окружность и треугольник:

void enter_coordinate_circle(circle* c)
{
    printf("Введите координаты окружности: ");
    scanf("%d %d", &c->C.x, &c->C.y);
    printf("Введите радиус окружности: ");
    scanf("%d", &c->r);
}

void enter_triangle_coordinate(triangle* t)
{
    printf("Введите координаты треугольника\n");
    for (int i = 1; i <= 3; i++) {
        printf("Введите координаты вершины: %d\n", i);
        scanf("%d %d", &t->T[i].x, &t->T[i].y);
    }
    t->T[4].x = t->T[1].x;
    t->T[4].y = t->T[1].y;

Как найти пересечение этих фигур(если оно есть при заданных координатах)


Ответы (1 шт):

Автор решения: MBo

Представьте каждую сторону треугольника в параметрическом виде

X = X1 + t * (X2 - X1)
Y = Y1 + t * (Y2 - Y1)

И подставьте в уравнение окружности

(X - CX)^2 + (Y - CY)^2 = R^2

и решите полученное квадратное уравнение для неизвестного t. Если корни существуют и находятся в интервале 0..1 - пересечение со стороной есть.

Уравнения будут несколько проще, если от всех координат отнять координаты центра окружности

 X1' = X1-C.x 
 Y1' = Y1-C.y 
 X' = X1' + t * (X2-X1)
 Y' = Y1' + t * (Y2-Y1)

 X'^2 + Y'^2 = R^2
→ Ссылка