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

Вычислить площадь выпуклого четырёхугольника ABCD - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
RT_BERSERKER
0 / 0 / 0
Регистрация: 07.09.2014
Сообщений: 13
07.09.2014, 10:07     Вычислить площадь выпуклого четырёхугольника ABCD #1
Задача на С++ (Не могу разобраться)

Нужно вычислить площадь выпуклого четырёхугольника ABCD, заданного длинами своих сторон a, b, c, d и одной из диагоналей e.
Нужно составить блок схему и саму программу,помогите с программой,и желательно бы объяснить,очень надеюсь на помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 10:07     Вычислить площадь выпуклого четырёхугольника ABCD
Посмотрите здесь:

Площадь выпуклого многогранника методом триангуации по формуле Герона C++
Два треугольника заданы координатами своих вершин A,B,C. Вычислить площадь треугольника и определить какой треугольник имеет большую площадь C++
C++ Вычислить площадь круга
Вычислить площадь C++
Площадь квадрата равна S. Вычислить сторону квадрата а, диагональ d и площадь S1 описанного около этого квадрата круга C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gru74ik
08.09.2014, 13:40     Вычислить площадь выпуклого четырёхугольника ABCD
  #21

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
прошлые грабли ничему не учат!... И думать в том числе....
Ты хочешь сказать, что (SABD + SBCD) != (SABC + SACD) ?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
08.09.2014, 13:55     Вычислить площадь выпуклого четырёхугольника ABCD #22
Цитата Сообщение от gru74ik Посмотреть сообщение
с подачи местных гуру приучаю себя всегда писать std::Бла-бла-бла
Вот здесь вот можно помахать флажками чуток: using namespace std и std:: надоело смотреть!
_Ivana
08.09.2014, 14:00
  #23

Не по теме:

gru74ik, я дал тебе пример с числами и ссылку на калькулятор. Но ты ленишься проверить. Потому что ты все знаешь. Сам то как относишься к лентяям?

gru74ik
08.09.2014, 14:03
  #24

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
gru74ik, я дал тебе пример с числами и ссылку на калькулятор. Но ты ленишься проверить. Потому что ты все знаешь. Сам то как относишься к лентяям?
Сижу, проверяю.

Fallenworld
08.09.2014, 14:05
  #25

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Ты хочешь сказать, что (SABD + SBCD) != (SABC + SACD) ?
при условии, что АВСD- это один и тот же 4х угольник. А если диагонали поменять, то они будут разные.
Но на решение задачи это не влияет.

gru74ik
08.09.2014, 15:44
  #26

Не по теме:

_Ivana, я проверил. Получилась погрешность из-за вычислений с корнями. А по сути - одна и та же величина, как и должно быть. Какая разница как вычислять площадь выпуклого четырёхугольника ABCD - как сумму площадей составляющих его треугольников ABD и BCD, или как сумму площадей составляющих его треугольников ABC и ACD ?

_Ivana
2191 / 1396 / 124
Регистрация: 01.03.2013
Сообщений: 4,154
Записей в блоге: 2
08.09.2014, 15:50     Вычислить площадь выпуклого четырёхугольника ABCD #27
gru74ik, давай без тега оффтопа, раз пошла такая пьянка. Вылаживай сюда числовые значения площадей для первого и второго вариантов.
gru74ik
Модератор
 Аватар для gru74ik
3123 / 1349 / 167
Регистрация: 20.02.2013
Сообщений: 3,867
Записей в блоге: 18
08.09.2014, 18:32     Вычислить площадь выпуклого четырёхугольника ABCD #28
AB = 11
BC = 11
AD = 15
CD = 15
AC = 20
BD = 15,762915582455
SABC + SACD = 157,62915582454788

SABD = SBCD = 78,81457791116506
SABD + SBCD = 157,62915582233012
Миниатюры
Вычислить площадь выпуклого четырёхугольника ABCD  
gru74ik
Модератор
 Аватар для gru74ik
3123 / 1349 / 167
Регистрация: 20.02.2013
Сообщений: 3,867
Записей в блоге: 18
08.09.2014, 18:51     Вычислить площадь выпуклого четырёхугольника ABCD #29
Всё, до меня дошло о чём речь. Приношу свои извинения 2AndrSlav и 2_Ivana. Действительно, по условию задачи ведь непонятно какая из диагоналей имеется ввиду. Поэтому у задачи, получается, два правильных ответа (если имеется ввиду одна диагональ - площадь четырёхугольника будет одна, а если имеется ввиду другая диагональ - площадь уже будет другая).
_Ivana
2191 / 1396 / 124
Регистрация: 01.03.2013
Сообщений: 4,154
Записей в блоге: 2
08.09.2014, 20:46     Вычислить площадь выпуклого четырёхугольника ABCD #30
Поэтому программа для данной задачи должна проверить несколько условий: возможен ли такой четырехугольник вообще (например, непросто построить четырехугольник со сторонами 1,2,3 и 500), сколько существует возможных конфигураций с данными сторонами и диагональю (если стороны заданы по кругу, то 0, 1 или 2, если допустимо произвольное расположение сторон, то может быть больше), отсечь из всех возможных конфигураций невыпуклые четырехугольники (если они будут), и выдать варианты ответа вместе с их конфигурациями. Написать такую программу несложно, но хоть немного поинтереснее, чем просто формулу забить.
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,691
08.09.2014, 23:57     Вычислить площадь выпуклого четырёхугольника ABCD #31
Цитата Сообщение от _Ivana Посмотреть сообщение
отсечь из всех возможных конфигураций невыпуклые четырехугольники
А, да, это я не учел в своей программе, но на самом деле это требование здесь излишне и на вычисление площади не влияет, достаточно требования несамопересекаемости четырехугольника.
Но ради прикола и науки добавил определение выпуклости в свою программу:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/////////////////////////////////////////////////////////////////////////////////////////
//Нужно вычислить площадь выпуклого четырёхугольника ABCD, заданного длинами своих сторон 
//a, b, c, d и одной из диагоналей e.
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
const   T_str   COMMA_DELIM     =   ", ";
/////////////////////////////////////////////////////////////////////////////////////////
bool    successfully_for_triangle_with_sides_set_area
    (
        double      a,
        double      b,
        double      c,
        double  &   area
    )
{
    double  p   =   ( a + b + c ) / 2;
 
    area        =       p
                    *   ( p - a )
                    *   ( p - b )
                    *   ( p - c );
 
    bool    bool_res    =   area >= 0;
    area                =   sqrt( area );
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
double  angle_of_triangle_with_sides
    (
        double  a,
        double  b,
        double  c
    )
{
    return  acos    (
                        ( b*b + c*c - a*a )/2/b/c
                    );
}
/////////////////////////////////////////////////////////////////////////////////////////
void    calculate_area_and_print_results_for_tetragon_with_triangles
    (
        double  a,
        double  b,
        double  e,
 
        double  c,
        double  d
    )
{
    static  const   double  PI  =   acos(-1.0);
    std::cout   <<  "Четырехугольник с треугольниками с длинами сторон ("
                <<  a   <<  COMMA_DELIM     <<  b   <<  COMMA_DELIM     <<  e   <<  ") и ("
                <<  c   <<  COMMA_DELIM     <<  d   <<  COMMA_DELIM     <<  e   <<  ")"
                <<  std::endl;
 
    double  area_abe    =   0;
    double  area_cde    =   0;
 
    if  (
                successfully_for_triangle_with_sides_set_area( a, b, e, area_abe )
            &&  successfully_for_triangle_with_sides_set_area( c, d, e, area_cde )
        )
    {
        if  (
                    angle_of_triangle_with_sides( a, b, e ) + angle_of_triangle_with_sides( d, c, e ) <= PI
                &&  angle_of_triangle_with_sides( b, a, e ) + angle_of_triangle_with_sides( c, d, e ) <= PI
            )
        {
            std::cout   <<  "является выпуклым ";
        }
        else
        {
            std::cout   <<  "НЕ является выпуклым ";
        }
        std::cout   <<  "и имеет площадь "
                    <<      area_abe
                        +   area_cde
 
                    <<  ".";
    }
    else
    {
        std::cout   <<  "невозможен.";
    }
    std::cout   <<  std::endl
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
void    calculate_area_and_print_results_for_tetragon_with_sides_and_diagonal
    (
        double  a,
        double  b,
        double  c,
        double  d,
 
        double  e
    )
{
    std::cout   <<  "Длины сторон четырехугольника: ("
                <<  a   <<  COMMA_DELIM
                <<  b   <<  COMMA_DELIM
                <<  c   <<  COMMA_DELIM
                <<  d   <<  ")" <<  COMMA_DELIM
 
                <<  " длина диагонали "
                <<  e
                <<  "."
                <<  std::endl
                <<  std::endl;
 
    calculate_area_and_print_results_for_tetragon_with_triangles
        (
            a, b, e,
            c, d
        );
 
    calculate_area_and_print_results_for_tetragon_with_triangles
        (
            b, c, e,
            d, a
        );
}
/////////////////////////////////////////////////////////////////////////////////////////
int     get_rand_val_from_segment
    (
        int     min_val,
        int     max_val
    )
{
    return  rand()  %   ( max_val - min_val + 1 ) + min_val;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    srand(unsigned(time(0)));
    const   int     SIDE_LEN_MIN    =   1;
    const   int     SIDE_LEN_MAX    =   5;
 
    calculate_area_and_print_results_for_tetragon_with_sides_and_diagonal
        (
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    ),
            get_rand_val_from_segment( SIDE_LEN_MIN,    SIDE_LEN_MAX    )
        );
    std::cout   <<  std::endl;
 
    system("pause");
}
_Ivana
2191 / 1396 / 124
Регистрация: 01.03.2013
Сообщений: 4,154
Записей в блоге: 2
09.09.2014, 00:04     Вычислить площадь выпуклого четырёхугольника ABCD #32
Цитата Сообщение от Mr.X Посмотреть сообщение
на самом деле это требование здесь излишне и на вычисление площади не влияет, достаточно требования несамопересекаемости четырехугольника.
Даже в моем пример с 11-11-15-15 / 20 четырехугольник может быть как выпуклый так и невыпуклый (сторонами по 11 внутрь, надо не складывать а вычитать площади треугольников).
А насчет приколов и науки - и самому полезно поупражняться, и защиту от некорректных данных никогда не лишне написать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2014, 00:17     Вычислить площадь выпуклого четырёхугольника ABCD
Еще ссылки по теме:

Найти длины диагоналей четырёхугольника C++
C++ Площадь четырёхугольника
Площадь выпуклого многоугольника методом триангуляции C++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,691
09.09.2014, 00:17     Вычислить площадь выпуклого четырёхугольника ABCD #33
Цитата Сообщение от _Ivana Посмотреть сообщение
Даже в моем пример с 11-11-15-15 / 20 четырехугольник может быть как выпуклый так и невыпуклый (сторонами по 11 внутрь, надо не складывать а вычитать площади треугольников).
А, в этом смысле да, надо откладывать треугольники по разные стороны диагонали, как у меня в программе. Но даже при этом из-за их наклона к диагонали четырехугольник может получиться невыпуклым, что в моей программе определяется. В этом случае площадь все равно равна сумме площадей треугольников.
Yandex
Объявления
09.09.2014, 00:17     Вычислить площадь выпуклого четырёхугольника ABCD
Ответ Создать тему
Опции темы

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