Obliczanie pola trójkąta wzorem Herona

Mamy dany dowolny trójkąt płaski:

obrazek Oznaczmy:

a, b, c - boki trójkąta

A, B, C - wierzchołki

(xA,yA) - współrzędne wierzchołka A

(xB,yB) - współrzędne wierzchołka B

(xC,yC) - współrzędne wierzchołka C

Pole S trójkąta wyliczamy wg wzoru Herona:

obrazek

gdzie:

p  - połowa obwodu trójkąta
S  - pole trójkąta

 

Trójkąt będzie zdefiniowany przez współrzędne kolejnych wierzchołków. Wzór na długość odcinka o podanych współrzędnych końców wyprowadzamy w prosty sposób z twierdzenia Pitagorasa:

 

obrazek obrazek

 

// Obliczanie pola trójkąta wzorem Herona
// Data: 5-02-2009
// I LO w Tarnowie
//---------------------------------------

#include <cmath>
#include <iostream>
#include <iomanip>

using namespace std;

// Funkcja odczytuje współrzędne danego wierzchołka
// i umieszcza je w zmiennych przekazanych jej przez
// referencję na liście parametrów
//--------------------------------------------------
void czytaj_xy(char w,double &x, double &y)
{
  cout << "Podaj wspolrzedne dla wierzcholka " << w << endl;
  cout << "x" << w << " = "; cin >> x;
  cout << "y" << w << " = "; cin >> y;
  cout << endl;
}

// Funkcja oblicza długość odcinka o podanych
// współrzędnych jego końców.
//-------------------------------------------
double dlugosc(double x1,double y1,double x2,double y2)
{
  double dx = x2 - x1;
  double dy = y2 - y1;
  return sqrt(dx * dx + dy * dy);
}

// Program główny
//---------------
main()
{
  double xa,ya,xb,yb,xc,yc,a,b,c,p,s;
  
  cout << "Pole trojkata - metoda Herona\n"
          "-----------------------------\n\n";
          
// odczytujemy współrzędne kolejnych wierzchołków trójkąta

  czytaj_xy('A',xa,ya);
  czytaj_xy('B',xb,yb);
  czytaj_xy('C',xc,yc);
  
// obliczamy długość boków trójkąta

  a = dlugosc(xa,ya,xb,yb);
  b = dlugosc(xb,yb,xc,yc);
  c = dlugosc(xc,yc,xa,ya);
  
// obliczamy połowę obwodu trójkąta

  p = (a + b + c) / 2;
  
// wzorem Herona obliczamy pole trójkąta

  s = sqrt(p * (p - a) * (p - b) * (p - c));
  
// wyświetlamy wyniki obliczeń

  cout << setprecision(4) << fixed
       << "a     = " << setw(10) << a << endl
       << "b     = " << setw(10) << b << endl
       << "c     = " << setw(10) << c << endl << endl
       << "obwod = " << setw(10) << p + p << endl
       << "pole  = " << setw(10) << s << endl << endl;
       
  system("PAUSE");
}
Pole trojkata - metoda Herona
-----------------------------

Podaj wspolrzedne dla wierzcholka A
xA = 1
yA = 1

Podaj wspolrzedne dla wierzcholka B
xB = 2
yB = 1

Podaj wspolrzedne dla wierzcholka C
xC = 2
yC = 2

a     =     1.0000
b     =     1.0000
c     =     1.4142

obwod =     3.4142
pole  =     0.5000

Aby kontynuować, naciśnij dowolny klawisz . . .

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2024 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe