Форум программистов, компьютерный форум CyberForum.ru

Определить, имеются ли три прямые, пересекающиеся в одной точке - C++

Восстановить пароль Регистрация
 
Shiro
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
01.03.2016, 10:04     Определить, имеются ли три прямые, пересекающиеся в одной точке #1
Прямая на плоскости может быть задана уравнением a*x + b*y + с = 0, где a и b одновременно не равны нулю. Будем рассматривать прямые только с целыми коэффициентами a, b, c. Пусть даны коэффициенты нескольких прямых: a1, b1, c1, a2, b2, c2, ... , an, bn, cn.
Определить, имеются ли среди этих прямых совпадающие или параллельные.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2016, 10:04     Определить, имеются ли три прямые, пересекающиеся в одной точке
Посмотрите здесь:

Определить, имеются ли среди этих окружностей три параллельно пересекающиеся C++
C++ помогите пожалуйста задать прямые с помощью структур прямые задаются точкой и направляющим вектором. дальше как делать знаю
Определить будут ли заданные три точки расположены на одной прямой C++
C++ Определить, лежат ли три точки A, B, C на одной прямой. Если нет, найти угол ABC
C++ Три ученика и три языка. Определить кто на каком программирует.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yrceus
 Аватар для yrceus
80 / 80 / 54
Регистрация: 25.08.2013
Сообщений: 321
01.03.2016, 20:24     Определить, имеются ли три прямые, пересекающиеся в одной точке #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct straight {
    double a, b, c;
};
//----------------------------------------------------------------------------
    void initstr(straight &x) {
        cout << "Enter the  3 coefficients of equation: \n";
        for (;;) {
            if (cin >> x.a, cin >> x.b, cin >> x.c) {
                if (x.a || x.b)
                    break;
                else
                    cout << "A and B not zero.\n";
            }
            else {
                cout << "Incorrect input." << endl;
                cin.clear();
                while (cin.get() != '\n');
            }
        }
    }
//----------------------------------------------------------------------------
    void comparison(vector<straight> &lines) {
        int s = 0;
        for (auto x : lines) 
            for (auto y = lines.begin() + ++s; y < lines.end(); ++y) {
                double a, b, c;
                if (!x.a && !y->a || !x.b && !y->b)
                    continue;
                !x.a || !y->a ? a = 0 : a = x.a / y->a;
                !x.b || !y->b ? b = 0 : b = x.b / y->b;
                (!x.c || !y->c) && !(!x.c && y->c) ? c = a + 1 : !x.c && y->c ? c = a : c = x.c / y->c;
                if (abs(a - b) < 1E-4 && abs(a - c) < 1E-4)
                    cout << "Straight with coefficient \n" << x.a << ' ' << x.b << ' ' << x.c << " and\n"
                    << y->a << ' ' << y->b << ' ' << y->c << " equally.\n";
                else if (abs(a - b) < 1E-4 && abs(a - c) > 1E-4)
                    cout << "Straight with coefficient \n" << x.a << ' ' << x.b << ' ' << x.c << " and\n"
                    << y->a << ' ' << y->b << ' ' << y->c << " parallel.\n";
        }
    }
//-----------------------------------------------------------------------------
int main()
{
    size_t x;
    cout << "Enter lines: ";
    for (;;) {
        if (cin >> x)
            break;
        cout << "Incorrect input." << endl;
        cin.clear();
        while (cin.get() != '\n');
    }
    vector<straight> lines(x);
    while (x > 0) 
        initstr(lines[--x]);
    comparison(lines);  
    return 0;
}
Вроде не напутал
Shiro
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 9
03.03.2016, 09:51  [ТС]     Определить, имеются ли три прямые, пересекающиеся в одной точке #3
yrceus, попроще можно?
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
03.03.2016, 15:19     Определить, имеются ли три прямые, пересекающиеся в одной точке #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <cmath>
 
using namespace std;
 
struct Line {
    int a, b, c;
};
 
bool IsParallel(Line *A, Line *B) {
    if (B->a == 0) return B->a == 0;
    if (B->b == 0) return A->b == 0;
    return (fabs(A->a/B->a - A->b/B->b) < 1E-8);
}
 
bool IsCommonIntersection(Line *A, Line *B, Line *C, float &x, float &y) {
    if (IsParallel(A, B)) return false;
    x = (A->b*B->c - B->b*A->c) / (A->a*B->b - A->b*B->a);
    y = -(A->a*x + A->c)/A->b;
    return (fabs(C->a*x+C->b*y+C->c) < 1E-8);
}
 
int main() {
    int N;
    float x,y;
 
    cout << "N = "; cin >> N;
    
    Line *Lines = new Line[N];
    
    for (int i = 0; i < N; i++) cout << "Line " << i+1 << " (a, b, c): "; cin >> Lines[i].a >> Lines[i].b >> Lines[i].c;   
 
    for (int i = 0; i < N; i++)
      for (int j = i+1; j < N; j++)
        for (int k = j+1; k < N; k++) {
            if (IsCommonIntersection(&Lines[i],&Lines[j],&Lines[k], x, y)) {
                cout << "Lines " << i << ", " << j << " and " << k << " is crossing at (" << x << ";" << y << ")." << endl;
            }
        }
    delete[] Lines;
}
Yandex
Объявления
03.03.2016, 15:19     Определить, имеются ли три прямые, пересекающиеся в одной точке
Ответ Создать тему
Опции темы

Текущее время: 12:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru