Advertisement
cmiN

pintr

Jun 13th, 2012
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5.  
  6. struct Pct {
  7.     // o structura, un alt tip de date ce contine mai multe tipuri de date primitve
  8.     int x, y;
  9. };
  10.  
  11.  
  12. float dist(const Pct& a, const Pct& b)
  13. {
  14.     // distanta dintre 2 puncte a si b
  15.     return sqrt(pow(b.x - a.x, 2) + pow(b.y - a.y, 2));
  16. }
  17.  
  18.  
  19. float area(float a, float b, float c)
  20. {
  21.     // Heron pentru arie
  22.     float s = (a + b + c) / 2;
  23.     return sqrt(s * (s - a) * (s - b) * (s - c));
  24. }
  25.  
  26.  
  27. int main()
  28. {
  29.     Pct tr[3], m; // cele 3 puncte si punctul M
  30.     for (int i = 0; i < 3; ++i) {
  31.         cout << "Coordonate pentru punctul " << i << " (x y): ";
  32.         cin >> tr[i].x >> tr[i].y;
  33.     }
  34.     cout << "Coordonate pentru punctul M" << " (x y): ";
  35.     cin >> m.x >> m.y;
  36.     float lat[3]; // dimensiunile laturilor triunghiului
  37.     // lat[i] este latura opusa punctului `i`
  38.     lat[0] = dist(tr[1], tr[2]);
  39.     lat[1] = dist(tr[0], tr[2]);
  40.     lat[2] = dist(tr[0], tr[1]);
  41.     // acum "unim" punctul M cu fiecare dintre punctele A, B si C si calculam celelalte laturi
  42.     float mLat[3]; // mLat[i] este segmentul avand ca extremitati pe M si pe punctul `i`
  43.     mLat[0] = dist(m, tr[0]);
  44.     mLat[1] = dist(m, tr[1]);
  45.     mLat[2] = dist(m, tr[2]);
  46.     float sup[3]; // ariile celor 3 triunghiuri formate de punctul M si oricare alte 2 puncte
  47.     sup[0] = area(lat[0], mLat[1], mLat[2]);
  48.     sup[1] = area(lat[1], mLat[0], mLat[2]);
  49.     sup[2] = area(lat[2], mLat[0], mLat[1]);
  50.     // acum daca cele 3 arii, in care a fost impartit triunghiul insumate dau cat aria triunghiului ABC
  51.     // e clar ca punctul M se afla in interior
  52.     if (sup[1] + sup[2] + sup[3] == area(lat[0], lat[1], lat[2])) cout << "DA";
  53.     else cout << "NU";
  54.     cout << endl;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement