Ориентирано лице на триъгълник, формула на Херон

Изчисляване лице на триъгълник по въведени координати на върховете му е част от широко разпространена практическа задача: изчисляване лице на многоъгълник. В математиката има формули за изчисляване лице на правилен многоъгълник, но в практиката именно неправилния многоъгълник е общата задача. Най-често срещаният подход е представяне на многоъгълника като съставен от множество триъгълници или равнобедрени трапеци. Последователно ще бъдат разгледани няколко задачи имащи практическа насоченост. При въведени координати на две точки може да бъде изчислен както ъгъла на отсечката спрямо координатните оси, така и нейната дължина – дистанцията между точките. Често срещан случай е данни за многоъгълници да се представят като набор от координати на точки - техните върхове.

изчисляване лице на триъгълник по формула на Херон
медицентър - център на тежестта в триъгълник
окръжност и триъгълник - радиуси на описана, вписана и външно вписана окръжност
ориентирано лице на триъгълник

изчисляване лице на триъгълник по формула на Херон

При изчисляване лице на триъгълник по формула на Херон се изискват за входни данни дължините на страните в реален триъгълник. Нека са дадени 3 реални числа a,b,c представляващи дължини на страни в триъгълник. Всяка от страните в този триъгълник трябва да бъде по-малка от сбора на останалите две страни.

Тук ще използваме термина полупериметър – половината от периметъра на триъгълника. Така p = 0.5 * (a + b +c)
Лице на триъгълник S може да се изчисли по следната формула:
S = sqrt ( p * (p – a) * (p – b) * (p – c)).
Тук sqrt е библиотечна функция от C++, чрез която се изчислява корен квадратен. Изискването е стойността на аргумента да бъде равен или по-голям от 0. Такава ситуация би могла да възникне, ако едната от страните е по-голяма от сумата на останалите две страни.

Следващата примерна програма дава решена задача за изчисляване лице на триъгълник по формулата на Херон:
#include <iostream>
#include <cmath>
using namespace std;

int main ()
    {double a,b,c,p,lice;
   cout<<"Da se systawi programa, chrez koqto se wywevdat 3 realni chisla: a,b,c.\n";
   cout<<"Chislata a,b,c sa strani w triygylnik. Da se systawi programa, chrez\n";
   cout<<"koqto se izchislqwa lice na triygylnik po formula na Heron.\n";
   cout<<"Primer: 3,4,5 Izhod 6\n";
   cout<<"Wywedete strana a: ";cin>>a;
   cout<<"Wywedete strana b: ";cin>>b;
   cout<<"Wywedete strana c: ";cin>>c;
   p=0.5*(a+b+c);//poluperimetyr na triygylnik 
  if (a<p && b<p && c<p)
    {lice = sqrt(p*(p-a)*(p-b)*(p-c));
     cout<<" lice na triygylnik : "<<lice<<endl;}
   else //ednata strana >= na sumata ot ostanalite dwe strani
   {lice = 0;
     cout<<"Wywedenite dylvini na strani ne formirat triygylnik!\n";
}
 system ("pause");//izchakwa natiskane na klawish
return 0;
}//kraj na programa lice na triygylnik po formula na Heron

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


медицентър - център на тежестта в триъгълник

Пресечната точка на медианите в триъгълник се нарича още и медицентър, център на тежестта. Да разгледаме следната примерна задача: Въведени са координати за три точки, представляващи върхове на триъгълник. Търсим координатите на медицентър - пресечната точка на медианите в този триъгълник.

медицентър - център на тежестта в триъгълник

Алгоритъм:
Въвеждат се три двойки координати за връх в триъгълник.
Координатите на медицентър в триъгълник, съответно по абсциса и ордината, са средно аритметично от стойностите на координатите на върховете по съответните оси.

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

#include <iostream>
using namespace std;

int main()
{ int mas[3][2], i,j;
 double x0,y0;
 char ose;
 cout<<"Imate koordinati za trite wyrha na triygylnik - estestweni chisla\n";
 cout<<"ot interwala [1..101]. Da se izchislqt koorditite na medicentyra\n";
 cout<<"presechnata tochka na medianite w syshiq triygylnik.\n";
 cout<<"Da se systawi programa, chrez koqto se wywevdat koordinati na \n";
 cout<<"wyrhowete w triygylnik i se izwevdat koordinatite na medicentyra.\n";
 cout<<"Primer: 0,0; 6,0; 6,3  Izhod: X=4 Y=1 \n";
  
 do {
 x0=y0=0;//nachlana inicializaciq
 for (i=0; i<3;i++)
 { j=65+i;
  cout<<"Wywedete koordinati za wryh "<<(char)j<<": \n";
  cout<<"Po abscisa:  ";cin>>mas[i][0];
  x0+= mas[i][0];
  cout<<"Po ordinata:  ";cin>>mas[i][1];
   y0+= mas[i][1];
  } 
  x0/=3;
  y0/=3;
  cout<<"Koordinati na medicentyr X = "<<x0<<"; Y = "<<y0<<endl;
  cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
 } while (ose=='y'); 
   system("pause");
   return 0;
}//kraj na programa  medicentyr w triygylnik 

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

окръжност и триъгълник - радиуси на описана, вписана и външно вписана окръжност

Дадени са дължините на страни в триъгълник a,b,c. Търсим радиус на вписана, описана и външно вписана окръжност.
Алгоритъм: Въвеждаме трите страни на триъгълника: a, b, c
p - полупериметър на триъгълник p=0.5*(a+b+c)
S - лице на триъгълник S = sqrt(p*(p-a)*(p-b)*(p-c)
Описана окръжност около триъгълник - трите върха на триъгълника едновременно лежат на окръжността. Тук търсим окръжност с най-малкия възможен радиус, която отговаря на изискването.
Rv = a*b*c/(4*S)
Вписана окръжност в триъгълник - трите страни на триъгълника се явяват допирателни към тази окръжност.
Rw = 2*S/(a+b+c)
Външно вписана окръжност за даден триъгълник е окръжност, която се допира до една от страните му и до продълженията на другите две.
ra = S/(p-a); rb=S/(p-b); rc=S/(p-c);

Следващата примерна програма дава решена задача за намиране радиус на описана, вписана и външно вписана окръжност:
#include <iostream>
#include <cmath>
using namespace std;

 int main ()
  {double a,b,c,p,S,Ro,Rw,Ra,Rb,Rc;
  char ose; 
  cout<<"Da se systawi programa, chrez koqto se wywevdat 3 realni chisla: a,b,c.\n";
  cout<<"Chislata a,b,c sa strani w triygylnik. \n";
  cout<<"Da se systawi programa, chrez koqto se izchislqwa lice na \n";
  cout<<"triygylnik i radiusite na Rv opisana, Rw wpisana okryvnost.\n";
  cout<<"Primer: 3,4,5 Izhod S=6, Ro=2.5,  Rw=1 \n";
  do {
   cout<<"Wywedete strana a: ";cin>>a;
   cout<<"Wywedete strana b: ";cin>>b;
   cout<<"Wywedete strana c: ";cin>>c;
   p=0.5*(a+b+c);//poluperimetyr na triygylnik 

 if (a<p && b<p && c<p)
   {S = sqrt(p*(p-a)*(p-b)*(p-c));// lice na triygylnik po Heron 
    cout<<"lice na triygylnik : "<<S<<endl;

    Ro=(a*b*c)/(4*S);// opisana okryvnost Rv=a*b*c/(4*S)  
    cout<<" radius na opisana okryvnost Ro: "<<Ro<<endl;

    Rw=(2*S)/(a+b+c);// wpisana okryvnost Rw=2*S/(a+b+c)  
    cout<<" radius na wpisana okryvnost: "<<Rw<<endl;

    Ra=S/(p-a);// wynshno wpisana okryvnost Ra=S/(p-a)
    cout<<" radius na wynshno wpisana okryvnost Ra: "<<Ra<<endl; 

    Rb=S/(p-b);//wynshno wpisana okryvnost Rb=S/(p-b)
    cout<<" radius na wynshno wpisana okryvnost Rb: "<<Rb<<endl;  

    Rc=S/(p-c);//wynshno wpisana okryvnost Rc=S/(p-c)
     cout<<" radius na wynshno wpisana okryvnost Rc: "<<Rc<<endl; 

  }//if dali dylvinite na stranite formirat triygylnik
    else //ednata strana >= na sumata ot ostanalite dwe strani
     {S = 0;
     cout<<"Wywedenite dylvini na strani ne formirat triygylnik!\n";
     }
 cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
} while (ose=='y');  
   system ("pause");//izchakwa natiskane na klawish
   return 0;
}//kraj na programa triygylnik - okryvnost

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

Ориентирано лице на триъгълник

Имаме триъгълник зададен с координатите на трите си върха A, B, C. Координатите на точките са цели числа от интервала [-101..101]. Търсим лицето на триъгълника.

Алгоритъм за изчисляване на ориентирано лице. Лицето на успоредник описан с координатите на 3 свои върха може да бъде изчислено като детерминанта от 3-ти ред (x1 y1 1) (x2 y2 1) (x3 y3 1). Ако координатите на първия връх са в началото на координатната система, то лицето S = (x2*y3 - x3*y2). Прилагаме същите разсъждения, но вече за триъгълник. Използваме факта, че диагонал в успоредник го разделя на два еднакви триъгълника. Вече разглеждаме само единия триъгълник. Неговото лице е половината от лицето на успоредника. Независимо какви координати за въведени за първия връх условно ще преместим триъгълника, така че връх А да съвпада с началото на координатната система. В приложения алгоритъм новите координати на върховете се получават като се изваждат стойностите на координатите на първия връх, съответно по двете оси абсциса и ордината, от въведените координати на другите два върха.

Следващата примерна програма дава решена задача за ориентирано лице на триъгълник:
#include <iostream>
#include <cmath>
using namespace std;

int const N=3;//broj wyrhowe w triygylnik 

float orientirano_bez(int mas[][2], int i)
{float S;
 S=mas[0][0]*mas[1][1] + mas[2][0]*mas[0][1] + mas[1][0]*mas[2][1] - mas[2][0]*mas[1][1] - mas[0][0]*mas[2][1] - mas[1][0]*mas[0][1]; 
  return fabs(S/2);
}//

float orientirano_translacia(int mas[][2])
{ int x1,y1,x2,y2;//tipa na dannite
   float S;
  //translirame triygylnika, taka che wryh A da sywpadne s machaloto
   x1 = mas[1][0] - mas[0][0];
   y1 = mas[1][1] - mas[0][1];
   x2 = mas[2][0] - mas[0][0];
   y2 = mas[2][1] - mas[0][1];
   S = x1*y2 - x2*y1;
  return fabs(S/2);
}//orientirano lice na triygylnik s translaciq

void vhod( int mas[][2], int i)
{
  cout<<"Wywedete koordinati po abscisa za wryh "<<char(65+i)<<": ";cin>>mas[i][0];
  cout<<"Wywedete koordinati po ordinata za wryh "<<char(65+i)<<": ";cin>>mas[i][1];
  if (i)//premestwane na wyrhowete taka, che wryh A da e w tochka s koordinsti 0,0
 { mas[i][0]-=mas[0][0];//otmestwane po os X
  mas[i][1]-=mas[0][1];//otmestwane po os Y
 }//if   
}//vhod

int main()
{int i, mas[N][2]={ {1,3}, {4,3}, {1,10}};//koordinati na wyrhowete
 char ose;
 float S;
 cout<<"Imame koordinati na trite wyrha w triygylnik - estestweni chisla\n";
 cout<<"ot interwala [1..101]. Tyrsim orientiranoto lice na triygylnik.\n"; 
 cout<<"Primer: 1,3; 4,3; 1,10 Izhod 10.5\n";   
 cout<<"orientirano lice na triygylnik bez translaciq: "<<orientirano_bez(mas,0)<<endl;
 cout<<"orientirano lice na triygylnik s translaciq: "<<orientirano_translacia(mas)<<endl;
 do {
  for (i=0;i<N;i++)   vhod(mas,i);
  //S = 0.5*(x2*y3 - x3*y2) - orientirano lice na triygylnik   
  S=0.5*(mas[1][0]*mas[2][1] - mas[2][0]*mas[1][1]);
  S=abs(S);// absoliutnata stojnost na weche izchislenoto lice
  cout<<" lice na triygylnik : "<<S<<endl;
  cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
} while (ose=='y');   
 system("pause");
return 0;
}//kraj na programa orientirano lice na triygylnik

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

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

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