Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 09.04.2020
Сообщений: 21
1

Определить, является ли фигура, составленная про введённым координатам трапецией. Некорректная работа

09.12.2020, 02:00. Показов 6872. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте. Мне необходимо было создать класс «Трапеция», поля класса – координаты четырех точек на плоскости: координаты – числа с плавающей запятой. Далее нужно было выяснить, является ли фигура, составленная про введённым координатам трапецией, является ли эта фигура равнобедренной трапецией, а также вычислить длины всех её сторон, её периметр и площадь. Вот что я написал:

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
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Trapezoid {
public:
    float x1, x2, x3, x4;
    float y1, y2, y3, y4;
    float AB, BC, CD, DA,h, P, S;
    bool prov;
 
    void Input_coordinates() {                  //Ввод координат
        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 << "x4: "; cin >> x4;
        cout << "y4: "; cin >> y4;
    }
    bool Prov() {  //Проверка, является ли полученная фигура трапецией 
        if (((x1 - x2) * (y3 - y4) == (y1 - y2) * (x3 - x4)) || ((x1 - x4) * (y2 - y3) == (y2 - y4) * (x2 - x3))) {
            prov = 1;
            cout << "This is a trapezoid" << endl;
            return prov;
        }
        else
            cout << "This is not a trapezoid"<<endl;
    }
    void Lenght(){ //Вычисление длины всех сторон трапеции
        AB = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); cout << "AB = " << AB << endl;
        BC = sqrt(pow(x3 - x2, 2) + pow(y3 - y2, 2)); cout << "BC = " << BC << endl;
        CD = sqrt(pow(x4 - x3, 2) + pow(y4 - y3, 2)); cout << "CD = " << CD << endl;
        DA = sqrt(pow(x1 - x4, 2) + pow(y1 - y4, 2)); cout << "DA = " << DA << endl;
    }
    void Isosceles() { //Является ли трапеция равнобедренной. Боковыми сторонами приняты AB и CD
        if (AB == CD) {
            cout << "Trapezoid is isosceles" << endl;
        }
        else {
            cout << "Trapezoid isn't isosceles" << endl;
        }
    }
    void Perimeter() { //Нахождение периметра 
        P = AB + BC + CD + DA;
        cout << "Perimeter: " << P << endl;
    }
    void Area() { //Нахождение площади
        h = sqrt(pow(y2-y1,2));
        S = (h * (BC + DA)) / 2;
        cout << "Area: " << S<<endl;
    }
 
};
 
int main()
{
    system("chcp 1251>nul");
    cout << "Введите координаты точек:" << endl;
    Trapezoid trap;
    trap.Input_coordinates();
    trap.Prov();
    if (trap.prov == 1){
        trap.Lenght();
        trap.Isosceles();
        trap.Perimeter();
        trap.Area();
    }
    
 
    return 0;
}

Программа работает, однако, не со всеми координатами. Например, когда я ввожу координаты (1;1) (2;4) (4;4) (5;1), которые являются координатами равнобедренной трапеции, программа сообщает мне, что эта фигура трапецией не является. Как я понял, ошибка в неправильной проверке. Однако, я не смог придумать более подходящие условия для проверки введённых координат. Как можно исправить этот код, чтобы он стал лучше? Быть может, я допустил какие-нибудь ошибки, которых не вижу? Спасибо за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2020, 02:00
Ответы с готовыми решениями:

По координатам точек определить в какой плоскости лежит фигура и что это за фигура
Вводятся координаты 4 точек надо определить в какой плоскости лежит фигура и что это за фигура

Определить является ли четырехугольник трапецией
Привет. Подскажите, как реализовать это все на делфи. Погугил, ничег толкового не нашел. Набрал...

Проверить является ли фигура квадратом по координатам 4 точек
Даны координаты 4рех точек проверить является ли фигура квадратом. Все случаи учитывать

Определить является ли заданный четырехугольник трапецией
Пожалуйста помогите написать программу вопрос жизни и смерти, а я в этом деле чайник( Задание:...

1
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
09.12.2020, 09:27 2
Kazzran321, фигура является трапецией, если две стороны параллельны и две нет. Проверить параллельность можно через "псевдовекторное" произведение: два вектора коллинеарны, если оно равно нулю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// точка на плоскости
struct Point { double x, y; };
// вектор "разности"
Point operator-(Point lh, Point rh)
{
    return Point{ lh.x - rh.x, lh.y - rh.y };
}
// псевдовекторное произведение
double cross(Point lh, Point rh)
{
    return lh.x * rh.y - lh.y * rh.x;
}
 
 
// тогда если четыре точки упорядочены, то проверка на трапецию может выглядеть так
bool isTrapezoid(Point a, Point b, Point c, Point d)
{
    const double s1 = cross(a - b, c - d);
    const double s2 = cross(b - c, a - d);
    // сравнение лучше производить с некоторой погрешностью
    return (s1 != s2 && (s1 == 0 || s2 == 0));
}
Если точки не в порядке обхода, то нужно будет сделать дополнительные проверки, подумайте сами какие.
1
09.12.2020, 09:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2020, 09:27
Помогаю со студенческими работами здесь

Определить, является ли заданный четырёхугольник трапецией
Заданы координаты вершин четырёх угольника (x1,y1,x2,y2,x3,y3,x4,y4). Состаивть программу которая...

Как определить является ли четырёхугольник трапецией по 4-м точкам?
Всем доброго времени суток. В C# я новичек. Суть программы в том, что определяю по точкам, 4-х...

По введенным координатам вершин треугольника определите является ли данный треугольник прямоугольным
Сейчас нужно... По введенным координатам вершин треугольника определите является ли данный...

Определить по введенным с клавиатуры координатам точки
Используя имеющиеся в наличии задания, разработать в соответствии со своим вариантом программу, ...

По введенным координатам определить принадлежность области (переписать с Паскаля на Си)
program lr2; uses crt; var x,y:real; var otvet:char; begin writeln('Вариант 8'); ...

По введённым координатам точки определить, попадает ли она в окружность
Окружность задана координатами центра и радиусом. По введённым координатам точки определить,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru