Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Даны коэффициенты A1, B1, C1 уравнения первой прямой и коэффициенты A2, B2, C2 уравнения второй прямой. Требуется:
- Построить направляющие векторы для обеих прямых (вывести координаты)
- Найти точку пересечения двух прямых или вычислить расстояние между ними, если они параллельны
- #include<bits/stdc++.h>
- using namespace std;
- int sqr(int a)
- {
- return (a) * (a);
- }
- struct pt
- {
- double x, y;
- pt(){}
- pt(double _x, double _y)
- {
- x = _x, y = _y;
- }
- double dis(pt &a)
- {
- return sqrt(sqr(a. x - x) + sqr(a.y - y));
- }
- };
- struct vt
- {
- double a, b;
- vt(){}
- vt(double _a, double _b)
- {
- a = _a, b = _b;
- }
- double len()
- {
- return sqrt(sqr(a) + sqr(b));
- }
- vt ed ()
- {
- return vt(a / len(), b / len());
- }
- vt operator * (int k)
- {
- return vt(a * k, b * k);
- }
- };
- //Векторное произведение
- int tr(pt a, pt b, pt c)
- {
- vt p1 = vt(b.x - a.x, b.y - a.y);
- vt p2 = vt(c.x - b.x, c.y - b.y);
- return p1.a*p2.b - p1.b*p2.a;
- }
- int main()
- {
- pt x, y;
- pt x1, y1;
- int A1, B1, C1;
- int A2, B2, C2;
- cin >> A1 >> B1 >> C1;
- cin >> A2 >> B2 >> C2;
- //Ищу две точки, куда которые лежат на этих двух прямых
- if (B1 != 0)
- {
- x = pt(0, -(C1/B1));
- y = pt(1, (-(A1 + C1) / B1));
- }
- else
- {
- x = pt(-(C1/A1), 0);
- y = pt((-(B1 + C1) / A1), 1);
- }
- if (B2 != 0)
- {
- x1 = pt(0, -(C2/B2));
- y1 = pt(1, (-(A2 + C2) / B2));
- }
- else
- {
- x1 = pt(-(C2/A2), 0);
- y1 = pt((-(B2 + C2) / A2), 1);
- }
- cout << y.x - x.x << " " << y.y - x.y << endl;
- cout << y1.x - x1.x << " " << y1.y - x1.y << endl;
- //Проверяю на пресечение
- double d = tr(x, x1, y1) / x1.dis(y1);
- double z = A1 * B2 - A2 * B1;
- double p = (C1 * B2 - C2 * B1);
- double r = (A1 * C2 - A2 * C1);
- if (z == 0)
- {
- cout << fixed << setprecision(10) << d;
- }
- else
- {
- cout << fixed << setprecision(10) << (-p) / z << " " << (-r)/z;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement