Дистанция - разстояние между две точки

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

Нека имаме две точки T1, T2, за които са въведени координатите им в равнината Tx1, Ty1, Tx2, Ty2. Търсим тяхното разстояние. Ще наричаме дистанция разстояние между два обекта, две точки от равнината или пространството. Приемаме, че двете точки са краищата на свързващата ги отсечка. Тяхната дистанция може да се изчисли чрез теоремата на Питагор. Ако проектираме двете точки върху координатните оси абсциса и ордината, се получава правоъгълен триъгълник с дължина на катетите по абсциса Tx1-Tx2, по ордината: Ty1-Ty2. Дължината на хипотенузата в правоъгълния триъгълник е търсеното разстояние между двете точки - търсената дистанция. Аналогично можем да изчислим и разстоянието на точка от началото на координатната система. В някои случаи е по-удачно да се работи с полярни координати - ъгъл и радиус вектор - разстояние, дистанция.

разстояние между две точки

   За съхраняване данни за координати се използва тип структура. Хипотенузата се изчислява като корен квадратен (sqrt) от сума между квадратите (pow) на разликата в проекциите по двете оси. Аналогично се изчислява и разстоянието на всяка точка до началото на координатната система.
   Следва примерна програма с решена задача за изчисляване на дистанция - разстояние между две точки:
#include <iostream>
#include <cmath>
using namespace std;

int main ()
{ struct okr {double x,  y;} t1,t2;
  double dist; 
//okr o1,o2;
  cout<<"Imate danni za dwe tochki: koordinatite im po abscisa i ordinata.\n";
  cout<<"Da se systawi programa, chrez koqto se wywevdat koordinati na tochki\n";
  cout<<"realni chisla ot interwala [-101..101].Programata da izwede\n";
  cout<<"razstoqnieto mevdu dwete tochki, kakto i razstoqnieto im do\n";
  cout<<"do nachaloto na koordinatnata sistema.\n";
  cout<<"Primer: Ox1=1, Oy1=2; Ox2=4, oy2=6 Izhhod: 5; 2.23607; 7.2111 \n";
  cout<<"koordinati po abscisa za T1x: ";cin>>t1.x;
  cout<<"koordinati po ordinata T1y: ";cin>>t1.y;
  cout<<"koordinati po abscisa za T2x: ";cin>>t2.x;
  cout<<"koordinati po ordinata T1y: ";cin>>t2.y;
  dist= sqrt ( pow (t1.x-t2.x,2) + pow (t1.y-t2.y,2));//distanciq po Pitagor 
  cout<<"distanciq mevdu tezi dwe tochki : "<<dist<<endl;
  cout<<"dylvina na radius wektor za T1: "<<sqrt( pow (t1.x,2) + pow (t1.y,2))<<endl; 
  cout<<"dylvina na radius wektor za T1: "<<sqrt( pow (t2.x,2) + pow (t2.y,2))<<endl;
system ("pause");
return 0;
}//kraj na programa distanciq 

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


разстояние между точка и окръжност

Имаме окръжност с център O(x,y) и радиус R, както и точка Q(x,y). Търсим взаимното положение между окръжността и тази точка.

разстояние между точка и окръжност

Алгоритъм
Изчисляваме разстоянието между точка Q и O и го сравняваме с дължината на въведения радиус.
Съществуват най-общо три положения: при сравняване дължина на отсечка - разстояние OQ и радиус на окръжност R
OQ <R - точката принадлежи на окръжността
OQ = R - точката лежи на окръжността
OQ > R – точката е извън окръжността

Можете да намерите програма и решена задача за разстояние между точка и окръжност в разстояние между точка и окръжност

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


минимално разстояние между точка и окръжност

Имаме окръжност с център О и радиус R, като и точка P. Точката P непринадлежи на окръжността. От точка P е спусната допирателна към окръжността - точка на допиране Q. Въведени са данни за R и разстояние PQ. Търсим най-голямо и най-малко разстояние между точка P и окръжността.

минимално разстояние между точка и окръжност

Алгоритъм:
Да припомним някои свойства:
Радиус на окръжност сключва прав ъгъл с допирателната в точката на допиране.
Най-дългата хорда в една окръжност е нейният диаметър.
Центърът на окръжност разполовява диаметъра в същата окръжност.
Прекарваме права през точки P и O - тя пресича окръжността в точки M и N (PMON).
Така се формират двете разстояние между точка и окръжност: минимално разстояние PM, максимално разстояние PN.
Разглеждаме правоъгълния триъгълник PQO - хипотенуза PO, катети OQ=R, и PQ
От теорема на Питагор PO = sqrt(PQ*PQ + R*R)
минимално разстояние между точка и окръжност = PO - R
максимално разстояние между точка и окръжност = PO + R

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


разстояние между точка и отсечка

Имаме точка А(x,y), както и отсечка с начална и крайна точка съответно B(x,y), C(x,y). Търсим d - разстояние между точка и отсечка.

разстояние между точка и отсечка

Алгоритъм:
Въвеждаме координатите на всяка от трите точки.
Изчисляваме разстояние между всеки две от тях AB, BC, AC – чрез формула на Питагор.
Проверяваме дали точки ABC формират триъгълник – най-голямата страна е по-малка от сумата на другите две страни.
Ако страните не формират триъгълник разстоянието на точка до отсечка е d=0, но съществуват две възможности:
а) точка А лежи между BC – разстояние на т.А до отсечката AB;
б) точка А лежи на една и съща права с BC – изчисляваме разстояние AB, AC и вземаме по-малкото изчислено разстояние и извеждаме по-близкия връх.
Ако страните формират триъгълник - изчисляваме лице на триъгълник по формула на Херон.
Изчисляваме разстояние d = 2*S / AB – страна от триъгълник и височина към нея.
Ако разгледаме внимателно предходните няколко реда ще от забележим, че изчисленото минимално разстояние може да се явява към продължение на отсечката, но е и до точка принадлежаща към същата отсечка. За подобна практическа задача алгоритъма се усложнява с още няколко проверки. В приложената програма те не са дадени.
Следващата примерна програма дава решена задача за разстояние между точка и отсечка:

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

double distanciq (double mas[][2], int a, int b)
{double dist,x,y;
 x = mas[a][0]-mas[b][0];//distanciq po os X
 y = mas[a][1]-mas[b][1];//distanciq po os Y
 dist = sqrt(x*x  + y*y);// Pitagor
return dist;
}// distanciq

double razstoqnie (double mas[][2])
{double S,p,AB,BC,AC,h;
   AB = distanciq (mas,0,1);
   BC = distanciq (mas,1,2);
   AC = distanciq (mas,0,2);
   p=(AB+BC+AC)/2;//poluperimetyr
   if ((p-AB)>0 && (p-BC)>0 && (p-AC)>0)
    {S =sqrt(p*(p-AB)*(p-BC)*(p-AC));//lice po Heron
     h = 2*S/BC;//razstoqnie na t.A do BC
   } else
   {if ((BC>AB) && (BC>AC)) {h=0; cout<<"tochka A levi mevdu AB\n";} //tochka A levi mevdu BC
    else 
    {h=0;
     cout<<"tochka A levi na edna prawa s AB, no e po-blizo do tochka "; 
     if (AB<AC) cout<<"B\n"; else cout<<"C\n";}//tochka A ne levi mevdu BC
   } 
return h;
}// razstoqnie

void  tochka ( double mas[][2])
{ int i;
  for (i=0;i<3;i++)
  { cout<<"Wywedete koordinati po abscisa za tochka "<<char(65+i)<<": ";cin>>mas[i][0];
   cout<<"Wywedete koordinati po ordinata za tochka "<<char(65+i)<<": ";cin>>mas[i][1];
  }
 }//koordinati na tochka

int main()
{char ose;
 double d,mas[3][2];//koordinati na tochki
 cout<<"Imame koordinati na tri tochki A,B,C - realni chisla\n";
 cout<<"ot interwala [1..101]. Tyrsim razstoqnie mevdu tocka A i otscehka BC.\n";
 cout<<"Primer: 1,3; 4,3; 1,10 Izhod 10.5\n";

 do {
 tochka (mas);
 d=razstoqnie (mas);
 if (d)  cout<<"Razstoqnie na tochka A do otsechka BC = "<<d<<endl;
 cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
} while (ose=='y');
 system("pause");
return 0;
}//kraj na programa razstoqnie tochka otsechka

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


разстояние между две точки на допиране

Имаме окръжност с въведени център O(x,y) и радиус R, както и точка Q(x,y). Точката Q лежи извън окръжността - не принадлежи на тази окръжност. От точка Q са прекарани две допирателни към окръжността. Двете точки на допиране са съответно M, N. Търсим MN - разстояние между тези две точки на допиране.

разстояние между две точки на допиране

Алгоритъм
Да припомним свойство на диаметър и хорда - диаметър в една окръжност се явява симетрала за хорда, т.е. той е перпендикулярен към хорда и я разделя на две равни части
Въвеждаме координати на точка O и точка Q, както и радиус R.
Разглеждаме 2-та правоъгълни триъгълника OMQ - катет OM = R, MQ и триъгълник ONQ катет ON = R и NQ.
Изчисляваме тяхната обща хипотенуза OQ (формула на Питагор) за разстояние между точка Q и точка O - център на окръжност.
Двата триъгълника са еднакви - 2 равни страни и прав ъгъл.
Ще означим с P - пресечната точка между OQ и MN.
MP се явява височина към хипотенуза в правоъгълния триъгълник OMQ и е половината от търсеното разстояние MN.
Изчисляваме MQ (формула на Питагор) MQ = sqrt(OQ*OQ - R*R)
Лицето на правоъгълния триъгълник е полупроизведение на двата му катетата или полупроизведение на хипотенузата и височината към нея.
Изчисляваме MN = 2* R* MQ / QO

Следващата примерна програма дава решена задача за разстояние между две точки на допиране:

#include <iostream>
#include <cmath>
using namespace std;
 
double distanciq (double mas[][2], int a, int b)
{double dist,x,y;
 x = mas[a][0]-mas[b][0];//distanciq po os X
 y = mas[a][1]-mas[b][1];//distanciq po os Y
 dist = sqrt(x*x  + y*y);// Pitagor
return dist;
}// distanciq

double razstoqnie (double mas[][2])
{double OQ,MQ,MN;
   OQ = distanciq (mas,0,1);//razstoqnie mevdu tochka i cenyr na okryvnost
   if (OQ>mas[2][0]) // R - radius na okryvnost
   {MQ = sqrt(OQ*OQ - mas[2][0]*mas[2][0]);
    MN = 2* MQ*mas[2][0]/ OQ;
  } else {cout<<"Tazi tochka prinadlevi na okryvnostta.\n";MN=0;} 
return MN;
}// razstoqnie
    
void  tochka ( double mas[][2])
{ int i;
cout<<"Pyrwo se wywevdat koordinati za tochka.\n";
  for (i=0;i<2;i++)
  { cout<<"Wywedete koordinati po abscisa: ";cin>>mas[i][0];
   cout<<"Wywedete koordinati po ordinata: ";cin>>mas[i][1];
  }
 cout<<"Wywedete dylvina na radius R:"; cin>>mas[2][0]; 
 }//koordinati na tochka

int main()
{char ose;
 double d,mas[3][2];//koordinati na tochki
 cout<<"Imame okryvnost s koordinati na centyr O(x,y), radius i tochka Q(x,y)\n";
 cout<<"Chislata sa estestweni ot interwala [1..101]. Ot tochkata sa \n";
 cout<<"spusnati dwe dopiratelni kym okryvnostta w t.M i N. \n";
cout<<"Tyrsim razstoqnie mevdu tocka M i tochka N.\n";
 cout<<"Primer: Q(3,4); 0(0,4), R=3;  Izhod 4.8\n";

 do {

 tochka (mas);
 d=razstoqnie (mas);
 if (d)  cout<<" razstoqnie mevdu tochka M i tochka N = "<<d<<endl;
 cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;

} while (ose=='y');
 system("pause");
return 0;
}//kraj na programa razstoqnie tochka otsechka

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


разстояние между отсечка и окръжност

Имаме окръжност с център O(x,y) и радиус R, както и отсечка с начална и крайна точка съответно A(x,y), B(x,y). Търсим разстояние на отсечката до окръжността.

разстояние между отсечка и окръжност

Алгоритъм:
Тази задача включва в себе си задачите за разстояние между точка и окръжност и разстояние между две точки.
Ще се сравняват с дължината на радиуса: разстояние OA, разстояние OB, и най-малкото разстояние (перпендикуляра) от център O към отсечка AB.
Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

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

 
Размер на шрифта
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
Търсене в сайта: