Пересечение треугольника и окружности
Задал окружность и треугольник:
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