aLT22

4semlab2 (C++) KRISTINA'S LAB

Apr 26th, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.16 KB | None | 0 0
  1. /* 
  2.     Математическая часть - векторное и псевдоскалярное произведения.
  3.     Реализация - считаются произведения (1, 2, 3 - вершины треугольника, 0 - точка):
  4.     (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0)
  5.     (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0)
  6.     (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0)
  7.     Если они одинакового знака, то точка внутри треугольника, если что-то из этого - ноль, то точка лежит на стороне, иначе точка вне треугольника.
  8. */
  9. #include <iostream>
  10. #include <cmath>
  11.  
  12. using namespace std;
  13.  
  14. class Triangle {
  15.     private:
  16.         int x1, y1, x2, y2, x3, y3;
  17.     public:
  18.         Triangle (int X1, int Y1, int X2, int Y2, int X3, int Y3) {
  19.             x1 = X1;
  20.             y1 = Y1;
  21.             x2 = X2;
  22.             y2 = Y2;
  23.             x3 = X3;
  24.             y3 = Y3;
  25.         }
  26.         Triangle () {
  27.             x1 = y1 = x2 = y2 = x3 = y3 = 0;
  28.         }
  29.         ~Triangle() {
  30.             cout << "Working destructor!" << endl;
  31.         }
  32.         double space() {
  33.             double side_one = 0., side_two = 0., side_three = 0.;
  34.             side_one = sqrt(pow((x1 - x2), 2.) + pow((y1 - y2), 2.));
  35.             side_two = sqrt(pow((x2 - x3), 2.) + pow((y2 - y3), 2.));
  36.             side_three = sqrt(pow((x1 - x3), 2.) + pow((y1 - y3), 2.));
  37.             double p = 0.;
  38.             p = (side_one + side_two + side_three) / 2;
  39.             double space_area = 0.;
  40.             space_area = sqrt(p * (p - side_one) * (p - side_two) * (p - side_three));
  41.             return space_area;
  42.         }
  43.         void operator% (Triangle t) {
  44.             if (space() == t.space()) {
  45.                 cout << "Площади треугольников равны! " << endl;
  46.             } else {
  47.                 cout << "Площади не равны! " << endl;
  48.             }
  49.         }
  50.         bool check_triangle() {
  51.             double side_one = 0., side_two = 0., side_three = 0.;
  52.             side_one = sqrt(pow((x1 - x2), 2.) + pow((y1 - y2), 2.));
  53.             side_two = sqrt(pow((x2 - x3), 2.) + pow((y2 - y3), 2.));
  54.             side_three = sqrt(pow((x1 - x3), 2.) + pow((y1 - y3), 2.));
  55.             if ((side_one < side_two + side_three) && (side_two < side_one + side_three) && (side_three < side_one + side_two)) {
  56.                 return true;
  57.             } else
  58.                 return false;
  59.         }
  60.         bool isEncluded() {
  61.             double x0, y0;
  62.             cout << "Введите точку, которую следует проверить на включение: ";
  63.             cin >> x0 >> y0;
  64.             int first_eq = (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0);
  65.             int second_eq = (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0);
  66.             int third_eq = (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0);
  67.             if (first_eq <= 0 && second_eq <= 0 && third_eq <= 0) {
  68.                 return true;
  69.             } else {
  70.                 return false;
  71.             }
  72.         }
  73. };
  74.  
  75. int main() {
  76.     setlocale(LC_ALL, "Russian");
  77.     int x1, y1, x2, y2, x3, y3;
  78.     cout << "Введите последовательно (через пробел) координаты первого треугольника x1, y1, x2, y2, x3, y3: ";
  79.     cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
  80.     Triangle a(x1, y1, x2, y2, x3, y3);
  81.     cout << "Введите последовательно (через пробел) координаты второго треугольника x1, y1, x2, y2, x3, y3: ";
  82.     cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
  83.     Triangle b(x1, y1, x2, y2, x3, y3);
  84. start: if (a.check_triangle() && b.check_triangle()) {
  85.         char choice;
  86.         cout << "Выберите, что хотите сделать с треугольником:\n*****Найти его площадь --- s\n*****Проверить, включена ли точка в треугольник --- i\n*****Сравнить два треугольника по площадям --- %\n**********Ваш ввод: ";
  87.         cin >> choice;
  88.         cout << endl;
  89.         switch(choice) {
  90.             case('s'):
  91.                 cout << "Выберите треугольник, у которого хотите найти площадь (1 - первый, 2 - второй): ";
  92.                 cin >> choice;
  93.                 if (choice == '1') {
  94.                     cout << "Площадь первого треугольника равна " << a.space() << endl;
  95.                     break;
  96.                 } else {
  97.                     cout << "Площадь второго треугольника равна " << b.space() << endl;
  98.                     break;
  99.                 }
  100.             case('%'):
  101.                 a % b;
  102.                 break;
  103.             case('i'):
  104.                 cout << "Выберите треугольник, к которому хотите найти включение (1 - первый, 2 - второй): ";
  105.                 cin >> choice;
  106.                 if (choice == '1') {
  107.                     if (a.isEncluded()) {
  108.                         cout << "Включена!" << endl;
  109.                     } else {
  110.                         cout << "Не включена!" << endl;
  111.                     }
  112.                 } else {
  113.                     if (b.isEncluded()) {
  114.                         cout << "Включена!" << endl;
  115.                     } else {
  116.                         cout << "Не включена!" << endl;
  117.                     }
  118.                 }
  119.         }
  120.     } else {
  121.         cout << "Неверно заданы координаты вершин треугольника, они не образуют треугольник!\n";
  122.         main();
  123.     }
  124.     bool choice_continue;
  125.     cout << "Введите то, что хотите сделать (\"1\" - продолжить работу, \"0\" - выход) : ";
  126.     cin >> choice_continue;
  127.     if (choice_continue) {
  128.         goto start;
  129.     } else {
  130.         system("pause");
  131.         return 0;
  132.     }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment