- ъглополовяща-бисектриса
- Криви
- Разстояние между две точки
- ъгъл градуси радиан
- две окръжности
- диаметър на окръжност
- периметър
- височина, перпендикуляр
- триъгълник - Талес
- триъгълник - Херон
- триъгълник - Питагор
- правоъгълен триъгълник
- успоредник
- правоъгълник
- ромб
- трапец
- правоъгълен трапец
- многоъгълник
- дъга - хорда, ъгъл и радиус
- окръжност
- цилиндър
- конус
- призма
- пирамида
Взаимно разположение на две окръжности
взаимно разположение на две окръжности
две окръжности - вписани
две окръжности - описана окръжност
две окръжности - обща хорда
Дадени са дължините на радиусите на две окръжности 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
две окръжности - вписани
Имаме две окръжности съответно с център O и радиус R1 и с център Q и радиус R2 вписани една в друга, така че R1>R2, OQ<R1-R2<R1. Търсим радиусите R3>R4 на най-голямата и най-малката окръжност, вписани в по-голямата окръжност и едновременно допиращи се до окръжност с радиус R1 и окръжност с радиус R2.
Ако са въведени координатите на центровете можем да изчислим междуцентровото разстояние на двете окръжности по теорема на Питагор.
Центровете на разглежданите окръжности лежат на една права.
Частен случай е OQ=0 - концентрични окръжности R3=R4=0.5*(R1-R2)
радиус на по-малката окръжност R4=0.5*(R1-OQ-R2);
радиус на по-голямата окръжност R3= (R1-R2-R4)
Следващата примерна програма дава решена задача за две окръжности - вписани:
#include <iostream>
using namespace std;
int main()
{ double R1,R2,R3,R4,OQ;
cout<<"Imame dwe okryvnosti syotwetno okryvnost s centyr O i radius R1,\n";
cout<<"okryvnost s centyr Q i radius R2, wpisani izcqlo edna w druga.\n";
cout<<"Mevducntrowoto razstoqnie e w otnoshenie s dwata radiusa\n";
cout<<"kakto sledwa: OQ<R1-R2<R1.\n";
cout<<"Tyrsim radiusi na drugi dwe okryvnosti izcqlo wpisani w okryvnost O\n";
cout<<"i ednowremenno dopirashi se do okryvnosti O i Q, kakto i da imat\n";
cout<<"wyzmovno naj-golemiq R3 i wyzmovno naj-malkiq R4 radius.\n";
cout<<"Primer: R1=12, R2=4, OQ=6 Izgod 1, 7\n";
cout<<"Wywedete radius R1: ";cin>>R1;
cout<<"Wywedete radius R2: ";cin>>R2;
cout<<"Wywedete mevducentrowo razstoqnie OQ: ";cin>>OQ;
R4=0.5*(R1-OQ-R2);
R3= (R1-R2-R4);
cout<<"Naj-malkiqt radius e: "<<R4<<endl;
cout<<"Naj-golemiqt radius e: "<<R3<<endl;
system("pause");
return 0;
}//dwe okryvnosti
две окръжности - описана окръжност
Две окръжности със зададени център O,Q и радиуси R1, R2, така че OQ >R1+R2. Двата радиуса не са непременно равни. Търсим други две окръжности с най-малкия възможен радиус R3,R4, така че да се допират до първите две окръжности, както следва: окръжност с радиус R3 да описва двете начални окръжности; окръжност с радиус R4 да се допира външно до двете двете начални окръжности.
Центровете на разглежданите окръжности лежат на една права.
Ще разгледаме по-лекия вариант с въведено междуцентрово разстояние OQ.
R3 = 0.5*(OQ+R1+R2) - голямата, описваща окръжност
R4=0.5*(OQ-R1-R2) - малката окръжност
Следващата примерна програма дава решена задача за две окръжности - описани:
#include <iostream>
using namespace std;
int main()
{ double R1,R2,R3,R4,OQ;
cout<<"Imame dwe okryvnosti syotwetno okryvnost s centyr O i radius R1,\n";
cout<<"okryvnost s centyr Q i radius R2, taka che nqmat obsha tochka.\n";
cout<<"Mevducntrowoto razstoqnie e w otnoshenie s dwata radiusa\n";
cout<<"kakto sledwa: OQ>R1+R2 .\n";
cout<<"Tyrsim radiusi na drugi dwe okryvnosti ednowremenno dopirashi\n";
cout<<"se do okryvnosti O i Q i imashi wyzmovno naj-malkiq radius.\n";
cout<<"Ednata okryvnost s radius R3 da opiswa syshestwuwashite okryvnosti, a\n";
cout<<"wtorata okryvnost s radius R4 da ima samo po edna obsha tochka s\n";
cout<<"pyrwite 2 okryvnosti.\n";
cout<<"Primer: R1=12, R2=4, OQ=20 Izgod 2, 18\n";
cout<<"Wywedete radius R1: ";cin>>R1;
cout<<"Wywedete radius R2: ";cin>>R2;
cout<<"Wywedete mevducentrowo razstoqnie OQ: ";cin>>OQ;
R3 = 0.5*(OQ+R1+R2);
R4 = 0.5*(OQ-R1-R2);
cout<<"Naj-malkiqt radius e: "<<R4<<endl;
cout<<"Naj-golemiqt radius e: "<<R3<<endl;
system("pause");
return 0;
}//dwe okryvnosti
две окръжности - обща хорда
Имаме две окръжности зададени с координати на център O(x,y) и Q(x,y) и съответно радиуси R1 и R2. Двата радиуса не са непременно равни. Двете окръжности се пресичат взаимно. Търсим дължината на общата хорда AB на двете окръжности.
Ако се въвеждат координати на центът, то междуцентровото разстояние OQ се изчислява по теорема на Питагор.
Разглеждаме триъгълници OAQ и OBQ - еднакви 3-ти признак, т.к. страните на единия триъгълник са съответно равни на страните от другия триъгълник. Следователно ъгъл OQA=OQB.
Разглеждаме равнобедрен триъгълник AQB (бедрата са равни на R2), в който QH се явява ъглополовяща. Следователно QH е и височина към основата на равнобедрения триъгълник и негова медиана. Така AH=BH=AB/2.
Разглеждаме отново триъгълник OAQ с полупериметър p=0.5*(R1+R2+OQ)
лице на триъгълник Soaq=sqrt(p*(p-R1)*(p-R2)*(p-OQ) = OQ*AH/2.
дължина на обща хорда: AB=2*AH = 2*Soaq/OQ
Следващата примерна програма дава решена задача за две окръжности - обща хорда:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{ double R1,R2,Soaq,ab,p,OQ;
cout<<"Imame dwe wzaimno presichashi se okryvnosti syotwetno \n";
cout<<"okryvnost s centyr O i radius R1,okryvnost s centyr Q i radius R2.";
cout<<"Mevducntrowoto razstoqnie e w otnoshenie s dwata radiusa\n";
cout<<"kakto sledwa: R1<R2<OQ<R1+R2.\n";
cout<<"Tyrsim dylvina na tqhnata obsha horda AB.\n";
cout<<"Primer: R1=3, R2=4, OQ=5 Izgod 2.4\n";
cout<<"Wywedete radius na pyrwata okryvnost R1: ";cin>>R1;
cout<<"Wywedete radius na wtorata okryvnost R2: ";cin>>R2;
cout<<"Wywedete mevducentrowo razstoqnie OQ: ";cin>>OQ;
p=(R1+R2+OQ)/2;
Soaq=sqrt(p*(p-R1)*(p-R2)*(p-OQ));
ab=2*Soaq/OQ;
cout<<"dylvina na obsha horda: "<<ab<<endl;
system("pause");
return 0;
}//dwe okryvnosti
Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.