Advertisement
Risonna

lab2_n6 var2.1(completed?)

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