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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как можно получить список твитов по хештегу с использованием api твиттера? http://www.cyberforum.ru/cpp-beginners/thread1252231.html
подскажите пожалуйста, как можно получить список твитов по хештегу с использованием api твиттера?
C++ Задача "Метки колдунов" Всем доброго времени суток! Не приходят идеи по решению задачи: Задача 3. Метки колдунов В банке гоблинов есть сеть тоннелей, ведущих на поверхность из их подземных хранилищ. Схематичное изображение одной из таких сетей приведено на рисунке справа. Внизу рисунка отмечен подвал, обозначенный буквой A, поверхность отмечена буквой F. Другие буквы обозначают площадки, на которых... http://www.cyberforum.ru/cpp-beginners/thread1252208.html
C++ Изменения размерности динамического массива
недавно задался вопросом, а можно как-то изменить размерность динамического массива ну например есть такой массив int n; n=5; int *mas; mas=new int; потом я где-то в программе решил его увеличить и сделать например 6 или 7 ну или еще что, можно как-то это сделать? ну или например уменьшить
C++ Сколькими способами человек может попасть в магазин
МАГАЗИН На расстоянии N шагов от магазина стоит человек. Каждую минуту он выбирает, куда сделать шаг: к магазину или в противоположном направлении. Требуется написать программу, которая определит, сколькими способами он может попасть в магазин, пройдя ровно K шагов и оказавшись в магазине только после выполнения последнего шага. Входные данные Входной файл INPUT.TXT содержит 2 числа n...
C++ Скиньте интересные задания по ООП С++ http://www.cyberforum.ru/cpp-beginners/thread1252179.html
Добрый вечер, Начал изучать ООП - скиньте интересные задания с использованием ООП С++. Книжные задачки перерешал уже.
C++ Класс Rectangle: возвратить значения координат, длины, ширины и площади Реализовать класс Rectangle. Класс должен хранить координаты, а так же длину и ширину прямоугольника. Предусмотреть инициализацию данного класса через конструктор по умолчанию и с помощью координат двух противоположных вершин. Общими должны быть методы, которые возвращают координаты прямоугольника (x1, x2, y1, y2), длину, ширину, площадь, а также методы позволяющие изменять координаты, длину и... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,670
08.09.2014, 23:57     Вычислить площадь выпуклого четырёхугольника ABCD
Цитата Сообщение от _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");
}
 
Текущее время: 04:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru