Advertisement
Risonna

lab2_n3(fixed)

Oct 30th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.44 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     float x1, y1, x2, y2, x3, y3, a, b, c, xf1, yf1, xf2, yf2, xf3, yf3, kf1, kf2, kf3, KOEF, a1, a2, a3, b1, b2, b3, c1, c2, c3, storona1, storona2, storona3;
  8.     cout << "x1="; cin >> x1;
  9.     cout << "y1="; cin >> y1;
  10.     cout << "x2="; cin >> x2;
  11.     cout << "y2="; cin >> y2;
  12.     cout << "x3="; cin >> x3;
  13.     cout << "y3="; cin >> y3;
  14.     cout << "a="; cin >> a;
  15.     cout << "b="; cin >> b;
  16.     cout << "c="; cin >> c;
  17.     //По формулам координат середины отрезка находим x и y середин отрезков, на которые опускаются медианы (подробнее - http://www.treugolniki.ru/koordinaty-serediny-otrezka-formula/)
  18.     xf1 = (x2 + x3) / 2;
  19.     xf2 = (x1 + x3) / 2;
  20.     xf3 = (x1 + x2) / 2;
  21.     yf1 = (y2 + y3) / 2;
  22.     yf2 = (y1 + y3) / 2;
  23.     yf3 = (y1 + y2) / 2;
  24.     //далее находим коэффициент наклона прямых, на которых лежат медианы, перед этим проверив правильность координат
  25.     //проверка 1
  26.     storona1 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
  27.     storona2 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
  28.     storona3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
  29.     if (storona1 + storona2 > storona3&& storona1 + storona3 > storona2&& storona2 + storona3 > storona1)
  30.     {
  31.         if (y1 > yf1)
  32.         {
  33.             a1 = y1 - yf1;
  34.             if (x1 > xf1)
  35.             {
  36.                 kf1 = (y1 - yf1) / (x1 - xf1);
  37.             }
  38.             else
  39.             {
  40.                 kf1 = (y1 - yf1) / (xf1 - x1);
  41.             }
  42.         }
  43.         else
  44.         {
  45.             a1 = yf1 - y1;
  46.             if (x1 > xf1)
  47.             {
  48.                 kf1 = (yf1 - y1) / (x1 - xf1);
  49.             }
  50.             else
  51.             {
  52.                 kf1 = (yf1 - y1) / (xf1 - x1);
  53.             }
  54.         }
  55.         //проверка 2
  56.     //подпункт проверки для b1-b3
  57.         if (x1 > xf1)
  58.         {
  59.             b1 = x1 - xf1;
  60.         }
  61.         else
  62.         {
  63.             b1 = xf1 - x1;
  64.         }
  65.         if (x2 > xf2)
  66.         {
  67.             b2 = x2 - xf2;
  68.         }
  69.         else
  70.         {
  71.             b2 = xf2 - x2;
  72.         }
  73.         if (x3 > xf3)
  74.         {
  75.             b3 = x3 - xf3;
  76.         }
  77.         else
  78.         {
  79.             b3 = xf3 - x3;
  80.         }
  81.         //конец подпункта проверки, продолжение проверки 2
  82.         if (y2 > yf2)
  83.         {
  84.             a2 = y2 - yf2;
  85.             if (x2 > xf2)
  86.             {
  87.                 kf2 = (y2 - yf2) / (x2 - xf2);
  88.             }
  89.             else
  90.             {
  91.                 kf2 = (y2 - yf2) / (xf2 - x2);
  92.             }
  93.         }
  94.         else
  95.         {
  96.             a2 = yf2 - y2;
  97.             if (x2 > xf2)
  98.             {
  99.                 kf2 = (yf2 - y2) / (x2 - xf2);
  100.             }
  101.             else
  102.             {
  103.                 kf2 = (yf2 - y2) / (xf2 - x2);
  104.             }
  105.         }
  106.         //проверка 3
  107.         if (y3 > yf3)
  108.         {
  109.             a3 = y3 - yf3;
  110.             if (x3 > xf3)
  111.             {
  112.                 kf3 = (y3 - yf3) / (x3 - xf3);
  113.             }
  114.             else
  115.             {
  116.                 kf3 = (y3 - yf3) / (xf3 - x3);
  117.             }
  118.         }
  119.         else
  120.         {
  121.             a3 = yf3 - y3;
  122.             if (x3 > xf3)
  123.             {
  124.                 kf3 = (yf3 - y3) / (x3 - xf3);
  125.             }
  126.             else
  127.             {
  128.                 kf3 = (yf3 - y3) / (xf3 - x3);
  129.             }
  130.         }
  131.         //kf1 = (y1 - yf1) / (x1 - xf1);
  132.         //kf2 = (y2 - yf2) / (x2 - xf2);
  133.         //kf3 = (y3 - yf3) / (x3 - xf3);
  134.         //проверяем координаты, чтобы по ним задать значения c1-c3
  135.         //проверка 1
  136.         if (y1 > yf1)
  137.         {
  138.             if (x1 > xf1)
  139.             {
  140.                 c1 = ((-a) * x1) - b * y1;
  141.             }
  142.             else
  143.             {
  144.                 c1 = ((-a) * x1) - b * yf1;
  145.             }
  146.         }
  147.         else
  148.         {
  149.  
  150.             if (x1 > xf1)
  151.             {
  152.                 c1 = ((-a) * xf1) - b * y1;
  153.             }
  154.             else
  155.             {
  156.                 c1 = ((-a) * xf1) - b * yf1;
  157.             }
  158.         }
  159.         //проверка 2
  160.         if (y2 > yf2)
  161.         {
  162.             if (x2 > xf2)
  163.             {
  164.                 c2 = ((-a) * x2) - b * y2;
  165.             }
  166.             else
  167.             {
  168.                 c2 = ((-a) * x2) - b * yf2;
  169.             }
  170.         }
  171.         else
  172.         {
  173.  
  174.             if (x2 > xf2)
  175.             {
  176.                 c2 = ((-a) * xf2) - b * y2;
  177.             }
  178.             else
  179.             {
  180.                 c2 = ((-a) * xf2) - b * yf2;
  181.             }
  182.         }
  183.         //проверка 3
  184.         if (y3 > yf3)
  185.         {
  186.             if (x3 > xf3)
  187.             {
  188.                 c3 = ((-a) * x3) - b * y3;
  189.             }
  190.             else
  191.             {
  192.                 c3 = ((-a) * x3) - b * yf3;
  193.             }
  194.         }
  195.         else
  196.         {
  197.  
  198.             if (x3 > xf3)
  199.             {
  200.                 c3 = ((-a) * xf3) - b * y3;
  201.             }
  202.             else
  203.             {
  204.                 c3 = ((-a) * xf3) - b * yf3;
  205.             }
  206.         }
  207.         //выводим получившиеся значения просто для наглядности
  208.         cout << "kf1=" << kf1 << "\n";
  209.         cout << "kf2=" << kf2 << "\n";
  210.         cout << "kf3=" << kf3 << "\n";
  211.         //поскольку коэффициент наклона прямой в уравнении вида y=kx+b — это k, то нужно привести ax+by+c=0 к виду y=-(a/b)*x-c/b, -(a/b) — это и есть искомое k
  212.         KOEF = -(a / b);
  213.         //точно так же для наглядности выведем коэффициент наклона заданной прямой
  214.         cout << "KOEF=" << KOEF << "\n";
  215.         //сравниваем, совпадают ли коэффициенты наклона медиан с коэффициентом наклона заданной прямой. Дополню, что в Ax + By + C = 0; для y = kx+b  -->  b = -(C/B)
  216.         if (KOEF == kf1 || KOEF == kf2 || KOEF == kf3)
  217.         {
  218.             if ((a1 == a && b1 == b && c1 == c) || (a2 == a && b2 == b && c2 == c) || (a3 == a && b3 == b && c3 == c))
  219.             {
  220.                 cout << "Прямая совпадает с одной из медиан";
  221.             }
  222.             else
  223.             {
  224.                 cout << "Заданная прямая параллельна одной из медиан треугольника\n";
  225.             }
  226.         }
  227.         else
  228.         {
  229.             cout << "Прямая не параллельна ни одной из медиан треугольника\n";
  230.         }
  231.     }
  232.     else
  233.     {
  234.     cout << "Задана фигура, не являющаяся треугольником";
  235.     }
  236. return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement