Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- int main()
- {
- 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;
- cout << "x1="; cin >> x1;
- cout << "y1="; cin >> y1;
- cout << "x2="; cin >> x2;
- cout << "y2="; cin >> y2;
- cout << "x3="; cin >> x3;
- cout << "y3="; cin >> y3;
- cout << "a="; cin >> a;
- cout << "b="; cin >> b;
- cout << "c="; cin >> c;
- //По формулам координат середины отрезка находим x и y середин отрезков, на которые опускаются медианы (подробнее - http://www.treugolniki.ru/koordinaty-serediny-otrezka-formula/)
- xf1 = (x2 + x3) / 2;
- xf2 = (x1 + x3) / 2;
- xf3 = (x1 + x2) / 2;
- yf1 = (y2 + y3) / 2;
- yf2 = (y1 + y3) / 2;
- yf3 = (y1 + y2) / 2;
- //далее находим коэффициент наклона прямых, на которых лежат медианы, перед этим проверив правильность координат
- //проверка 1
- storona1 = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));
- storona2 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
- storona3 = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
- if (storona1 + storona2 > storona3&& storona1 + storona3 > storona2&& storona2 + storona3 > storona1)
- {
- if (y1 > yf1)
- {
- a1 = y1 - yf1;
- if (x1 > xf1)
- {
- kf1 = (y1 - yf1) / (x1 - xf1);
- }
- else
- {
- kf1 = (y1 - yf1) / (xf1 - x1);
- }
- }
- else
- {
- a1 = yf1 - y1;
- if (x1 > xf1)
- {
- kf1 = (yf1 - y1) / (x1 - xf1);
- }
- else
- {
- kf1 = (yf1 - y1) / (xf1 - x1);
- }
- }
- //проверка 2
- //подпункт проверки для b1-b3
- if (x1 > xf1)
- {
- b1 = x1 - xf1;
- }
- else
- {
- b1 = xf1 - x1;
- }
- if (x2 > xf2)
- {
- b2 = x2 - xf2;
- }
- else
- {
- b2 = xf2 - x2;
- }
- if (x3 > xf3)
- {
- b3 = x3 - xf3;
- }
- else
- {
- b3 = xf3 - x3;
- }
- //конец подпункта проверки, продолжение проверки 2
- if (y2 > yf2)
- {
- a2 = y2 - yf2;
- if (x2 > xf2)
- {
- kf2 = (y2 - yf2) / (x2 - xf2);
- }
- else
- {
- kf2 = (y2 - yf2) / (xf2 - x2);
- }
- }
- else
- {
- a2 = yf2 - y2;
- if (x2 > xf2)
- {
- kf2 = (yf2 - y2) / (x2 - xf2);
- }
- else
- {
- kf2 = (yf2 - y2) / (xf2 - x2);
- }
- }
- //проверка 3
- if (y3 > yf3)
- {
- a3 = y3 - yf3;
- if (x3 > xf3)
- {
- kf3 = (y3 - yf3) / (x3 - xf3);
- }
- else
- {
- kf3 = (y3 - yf3) / (xf3 - x3);
- }
- }
- else
- {
- a3 = yf3 - y3;
- if (x3 > xf3)
- {
- kf3 = (yf3 - y3) / (x3 - xf3);
- }
- else
- {
- kf3 = (yf3 - y3) / (xf3 - x3);
- }
- }
- //kf1 = (y1 - yf1) / (x1 - xf1);
- //kf2 = (y2 - yf2) / (x2 - xf2);
- //kf3 = (y3 - yf3) / (x3 - xf3);
- //проверяем координаты, чтобы по ним задать значения c1-c3
- //проверка 1
- if (y1 > yf1)
- {
- if (x1 > xf1)
- {
- c1 = ((-a) * x1) - b * y1;
- }
- else
- {
- c1 = ((-a) * x1) - b * yf1;
- }
- }
- else
- {
- if (x1 > xf1)
- {
- c1 = ((-a) * xf1) - b * y1;
- }
- else
- {
- c1 = ((-a) * xf1) - b * yf1;
- }
- }
- //проверка 2
- if (y2 > yf2)
- {
- if (x2 > xf2)
- {
- c2 = ((-a) * x2) - b * y2;
- }
- else
- {
- c2 = ((-a) * x2) - b * yf2;
- }
- }
- else
- {
- if (x2 > xf2)
- {
- c2 = ((-a) * xf2) - b * y2;
- }
- else
- {
- c2 = ((-a) * xf2) - b * yf2;
- }
- }
- //проверка 3
- if (y3 > yf3)
- {
- if (x3 > xf3)
- {
- c3 = ((-a) * x3) - b * y3;
- }
- else
- {
- c3 = ((-a) * x3) - b * yf3;
- }
- }
- else
- {
- if (x3 > xf3)
- {
- c3 = ((-a) * xf3) - b * y3;
- }
- else
- {
- c3 = ((-a) * xf3) - b * yf3;
- }
- }
- //выводим получившиеся значения просто для наглядности
- cout << "kf1=" << kf1 << "\n";
- cout << "kf2=" << kf2 << "\n";
- cout << "kf3=" << kf3 << "\n";
- //поскольку коэффициент наклона прямой в уравнении вида y=kx+b — это k, то нужно привести ax+by+c=0 к виду y=-(a/b)*x-c/b, -(a/b) — это и есть искомое k
- KOEF = -(a / b);
- //точно так же для наглядности выведем коэффициент наклона заданной прямой
- cout << "KOEF=" << KOEF << "\n";
- //сравниваем, совпадают ли коэффициенты наклона медиан с коэффициентом наклона заданной прямой. Дополню, что в Ax + By + C = 0; для y = kx+b --> b = -(C/B)
- if (KOEF == kf1 || KOEF == kf2 || KOEF == kf3)
- {
- if ((a1 == a && b1 == b && c1 == c) || (a2 == a && b2 == b && c2 == c) || (a3 == a && b3 == b && c3 == c))
- {
- cout << "Прямая совпадает с одной из медиан";
- }
- else
- {
- cout << "Заданная прямая параллельна одной из медиан треугольника\n";
- }
- }
- else
- {
- cout << "Прямая не параллельна ни одной из медиан треугольника\n";
- }
- }
- else
- {
- cout << "Задана фигура, не являющаяся треугольником";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement