Задача.
Треугольник и круги.
Лежит ли заданный на плоскости треугольник АВС в области пересечения заданных кругов:
[latex](x-a1)^2+(y-b1)^2<r1^2[/latex] , и [latex](x-a2)^2+(y-b2)^2<r2^2[/latex] ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <iostream> #include <math.h> using namespace std; int main(){ int a1, b1, r1; int a2, b2, r2; int ax, bx, cx; int ay, by, cy; cin >> a1 >> b1 >> r1; cin >> a2 >> b2 >> r2; cin >> ax >> bx >> cx; cin >> ay >> by >> cy; if ( ((ax-a1)*(ax-a1)+(ay-b1)*(ay-b1)<r1*r1)&& ((bx-a1)*(bx-a1)+(by-b1)*(by-b1)<r1*r1)&& ((cx-a1)*(cx-a1)+(cy-b1)*(cy-b1)<r1*r1)&& ((ax-a2)*(ax-a2)+(ay-b2)*(ay-b2)<r2*r2)&& ((bx-a2)*(bx-a2)+(by-b2)*(by-b2)<r2*r2)&& ((cx-a2)*(cx-a2)+(cy-b2)*(cy-b2)<r2*r2)) { printf ("На пересечении"); } else { printf ("Не на пересечении"); } return 0; } |
Код программы на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in=new Scanner(System.in); int a1=in.nextInt(); int b1=in.nextInt(); int r1=in.nextInt(); int a2=in.nextInt(); int b2=in.nextInt(); int r2=in.nextInt(); int ax=in.nextInt(); int bx=in.nextInt(); int cx=in.nextInt(); int ay=in.nextInt(); int by=in.nextInt(); int cy=in.nextInt(); if ( ((ax-a1)*(ax-a1)+(ay-b1)*(ay-b1)<r1*r1)&& ((bx-a1)*(bx-a1)+(by-b1)*(by-b1)<r1*r1)&& ((cx-a1)*(cx-a1)+(cy-b1)*(cy-b1)<r1*r1)&& ((ax-a2)*(ax-a2)+(ay-b2)*(ay-b2)<r2*r2)&& ((bx-a2)*(bx-a2)+(by-b2)*(by-b2)<r2*r2)&& ((cx-a2)*(cx-a2)+(cy-b2)*(cy-b2)<r2*r2)) { System.out.printf("На пересечении"); } else { System.out.printf("Не на пересечении"); } } } |
Ссылка на программу на Java:http: //ideone.com/QZ7RB1
Решение:
Поскольку все фигуры выпуклые достаточно проверить вершины треугольника. Подставляем координаты всех трёх вершин в оба неравенства. Если все условия удовлетворены, то лежит. Если хоть одно условие не выполняется, то не лежит.
Тест
a1 | b1 | r1 | a2 | b2 | r2 | ax | bx | cx | ay | by | cy | Принадлежит? |
1 | 2 | 3 | 3 | 4 | 5 | 6 | 7 | 8 | 6 | 7 | 4 | нет |
1 | 2 | 15 | 3 | 4 | 12 | 6 | 7 | 8 | 6 | 7 | 4 | да |
7 | 5 | 10 | 4 | 6 | 16 | 6 | 7 | 3 | 5 | 6 | 7 | да |
7 | 5 | 5 | 4 | 6 | 3 | 6 | 7 | 3 | 5 | 6 | 7 | нет |