1

Тема: Поясніть помилку!

Визначити в скількох точках перетинаються два кола.


   Вхідні дані

   6 чисел x1, y1, r1, x2, y2, r2, де x1, y1, x2, y2, - координати центрів кіл, r1, r2 – їх радіуси. Всі числа - дійсні, не перевищують 1000000000 за модулем, та задані не більш ніж з 3 знаками після коми.

   Вихідні дані

   Кількість точок перетину. Якщо точок перетину нескінченно багато, то вивести -1.

var x1,y1,r1,x2,y2,r2: longint;
begin
readln(x1,y1,r1,x2,y2,r2);
  if x1=x2 and y1=y2 and r1=r2 then writeln(-1);
  else begin
  l:=sqrt(sqr(x2-x1)+sqr(y2-y1));
  p:=r1+r2;
  o:=x1+r1;
  i:=y1+r1;
  g:=x2+r2;
  c:=y2+r2;
    if p=l then writeln(1);
    else begin
      if p>l then writeln(0);
      else begin
       if (o>g and i>c) or (o<g and i<c) then writeln(0)
       else writeln(2);
end;
end;
end;
end.

2

Re: Поясніть помилку!

Що не так працює? І додай коменти, якщо не хочеш називати нормально змінні.

3

Re: Поясніть помилку!

В мене ідея така:
- знаходимо довжину між центрами кіл(І)
- якщо все рівне значить коло на колі значить безліч точок і отже (-1)
- якщо сума радіусів дорівнює відстані між колами значить тільки одна точка перетину(1)
- якщо сума радіусів більша за довжину між центрами означає що кола не перетинаються(0)
і о тут два випадки далі на малюнку

4 Востаннє редагувалося Chemist-i (08.01.2015 00:46:22)

Re: Поясніть помилку!

Дивився код, ужс.

За основу взяте завдання:
Визначити в скількох точках перетинаються два кола.
По перше, подумаємо скільки всього є варіантів, їх 3,

  • перетинаються у нескінченній кількості точок;

  • Не перетинаються;

  • перетинаються в одній точці;

  • перетинаються в двох;

І по пунктам шукаємо:

  • Зразу перевіряймо на співпадіння, коли кола однакові і центри в одній точці - повертаємо -1 і виходимо;

  • Якщо спільних точок нема - то відстань між центрами буде більша ніж (радіус першого + радіус другого) або менша ніж (|радіус1-радіус2|)

  • Якщо спільна точка одна - то відстань між колами буде дорівнювати відстані (радіус1 + радіус2) або дорівнювати (|радіус1-радіус2|)

  • Інакше - третій варіант, тут навіть розраховувати нічого не треба;

Як знайти відстань між точками на площині?
Теорема Піфагора

http://5.firepic.org/5/images/2015-01/07/sknpa5dgva4n.gif

де Length - довжина;
  x1,y1 - кординати першого кола;
  x2,y2 - координати другого;

5

Re: Поясніть помилку!

https://drive.google.com/file/d/0B7r5An … sp=sharing

6 Востаннє редагувалося Kaskade (07.01.2015 22:35:08)

Re: Поясніть помилку!

Будь ласка напиши прогу або кусочок . великий кусочок

7

Re: Поясніть помилку!

Так Ви праві, доповнив попереднє повідомлення;

8

Re: Поясніть помилку!

Kaskade написав:

Будь ласка напиши прогу або кусочок . великий кусочок

Прихований текст

Код за 10 гривень на картку Приват-банку

9

Re: Поясніть помилку!

По-перше, опиши всі змінні.
По-друге, крапку з комою перед else позабирай.

10

Re: Поясніть помилку!

А щодо самої задачі, то там чотири випадки:
  - кола накладаються, центри і радіуси співпадають;
  - дотикаються (зовні та всередині);
  - не дотикаються (зовні та всередині);
  - перетин у двох точках.

11

Re: Поясніть помилку!

Kaskade
Якщо у вас нема бажання щось робити самому, то можна перенести тему в розділ Пропоную роботу