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;
- 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
- 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";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement