Взаимно разположение на две окръжности

Дадени са дължините на радиусите на две окръжности R1, R2, както и координатите на техните центрове O1(X1,Y2) и O2(X2,Y2), всички те са естествени числа от интервала [1..1001]. Търсим взаимното разположение на тези две окръжности.

взаимно разположение на две окръжности

Алгоритъм:
   Всички разсъждения са на основа сравнение - разстояние между центровете на тези две окръжности и сумата/разликата от дължините на техните радиуси. От данните за координатите на двата центъра се разбира дали двете окръжности са:
а) концентрични (центровете им съвпадат) или
б) ексцентрични (центровете им не съвпадат).

Ако двете окръжности са концентрични има следните възможни положение:
а) двете окръжности са идентични - ако имат еднакви радиуси;
б) двете окръжности са вписани една в друга - ако имат различни радиуси.

За точното определяне на останалите случаи трябва да се изчисли тяхното междуцентрово разстояние - по формулата на Питагор.
L = sqrt ((X1-X2)*(X1-X2) + (Y1-Y2)*(Y1-Y2)) - корен квадратен от квадратите на разликите на координатите по абсциса и ордината на двата центъра.
В следващите разсъждения ще използваме абсолютна стойност на разликата от двата радиуса - abs(R1-R2)
Ако окръжностите са ексцентрични възможностите за тяхното взаимно положение са доста повече:
а) двете окръжности са вписани (лежат една в друга) и нямат допирна точка, ако междуцентровото разстояние е по-малко от абсолютната стойност на разликата между двата радиуса: L<abs(R1-R2)
б) двете окръжности са вписани, но имат една допирна точка L=abs(R1-R2) - допират се вътрешно, където междуцентровото разстояние е равно на абсолютната стойност от разликата между двата радиуса
в) двете окръжности се пресичат при (L>abs(R1-R2) ) and (L< (R1+R2)) - междуцентровото разстояние е по-голямо от абсолютната стойност на разликата от двата радиуса, но е по-малко от тяхната сума;
г) двете окръжности не са вписани, но имат една външна допирна точка L=R1+R2 - допират се външно междуцентровото разстояние е равно на сумата от двата радиуса
   д) двете окръжности не са вписани и нямат допирна точка L>R1+R2

Следващата примерна програма дава решена задача за взаимно разположение на две окръжности като се използва сравнение между квадратите (втората степен) на тяхното междуцентрово разстояние, сумата и разликата на двата радиуса.

#include <iostream>
#include <cmath>
using namespace std;

int main ()
{ struct okr {int x,  y,  R;} o1,o2;
  int dist, rad, razl; 
  cout<<"Imate danni za dwe okryvnosti: koordinati za centyr Ox,Oy,i radius R.\n";
  cout<<"Da se systawi programa, chrez koqto se wywevdat koordinati na centyra\n";
  cout<<"po abscisa i ordinata za dwete okryvnosti, kakto i tehnite radiusi.\n";
  cout<<"Programata da izwede wzaimnoto polovenie na tezi dwe okryvnosti.\n";
  cout<<"Primer: Ox1=0, Oy1=0; R1=5, Ox2=0, oy2=10, R2=5 Izhhod: Dopirat se wynshno.\n";
  cout<<"Wywedete danni za Ox1: ";cin>>o1.x;
  cout<<"Wywedete danni za Oy1: ";cin>>o1.y;
  cout<<"Wywedete danni za R1: ";cin>>o1.R;
  cout<<"Wywedete danni za Ox2: ";cin>>o2.x;
  cout<<"Wywedete danni za Oy2: ";cin>>o2.y;
  cout<<"Wywedete danni za R2: ";cin>>o2.R;
  dist=(o1.x-o2.x)*(o1.x-o2.x) + (o1.y-o2.y)*(o1.y-o2.y);
  rad=(o1.R + o2.R)*(o1.R + o2.R);
  if (o1.R >o2.R) razl= (o1.R - o2.R)*(o1.R - o2.R); 
     else razl= (o2.R -o1.R)*(o2.R -o1.R);
   cout<<"dist*dist = "<<dist<<endl;
   cout<<"rad*rad = "<<rad<<endl;
   cout<<"raxl*razl = "<<razl<<endl;
  if (dist==rad) cout<<" dwete okryvnosti se dopirat wynshno.\n";
   else 
   { if (dist>rad) cout<<" dwete okryvnosti ne sa wpisani i nqmat obsha tochka.\n"; 
     else  //(dist<rad) - mevducentowoto razstoqnie < ot sumata na 2-ta radiusa
      {if (dist==razl) cout<<" dwete okryvnosti sa wpisani i se dopirat wytreshno.\n"; 
       if (dist<razl) cout<<" dwete okryvnosti sa wpisani i nqmat obsha tochka.\n"; 
       if (dist>razl) cout<<" dwete okryvnosti se presichat i imat 2 obshi tochki.\n";
      }   
   }
system ("pause");
return 0;
}//kraj na programa dwe okryvnosti

Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

Начало на страницата

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: