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

Выпуклые многоугольники - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевести с Pascal на Turbo C http://www.cyberforum.ru/cpp-beginners/thread133335.html
Перевести с Pascal на Turbo C program zadacha_10; uses crt; var f: text; s,s1,s2: string; i,l,l1: integer; begin clrscr;
C++ Оператор присваивания и деструктор Вопрос: почему в 52 строке Access violation? Если убрать строку 50, все будет нормально. #include <iostream> using namespace std; typedef int TType; class Foo { TType **bar; int Size; public: http://www.cyberforum.ru/cpp-beginners/thread133320.html
клас обработчик C++
Написать класс обработчик исключительных ситуаций. Программа ловит ошибкуделения на нуль и выводитсообщение,вв какой части программы произошла ошибка. Ребята помогите с задачей пожалуйста.
C++ Каждое слово из строки занести как елемент массива!
Здравствуйте! Помогите! Я новичок в с++! Нужно каждое слово из строки занести как элемент массива. количество слов может быть разное (от 1 до 500 слов). int main() { char *intput = "слово1 слово2 слово3"; char *output; char q3; char q4; char q5; char q6;
C++ составить программу, которая определяет углы со сторонами a,b,c http://www.cyberforum.ru/cpp-beginners/thread133277.html
составить программу, которая определяет углы со сторонами a,b,c
C++ Обьекты помогите зделать задачку Построить сложное иерархическое меню: пробел будет открывать главное меню, последовательное нажатие на клавиши Enter и Пробел будет разворачивать подсвеченный пункт в подменю или, если пункт находится на нижнем уровне, клавиша Enter будет сворачивать подменю. Нажатие на клавишу Esc заканчивает работу программы. подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4947 / 3023 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
23.05.2010, 19:22     Выпуклые многоугольники
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
 
int x[100];
int y[100];
int u[100];
int s[100];
 
int pnpoly(int npol, int *xp, int *yp, int x, int y)
{
    int c = 0;
 
    for (int i = 0, j = npol - 1; i < npol; j = i++)
    {
        if ((((yp[i] <= y) && (y < yp[j])) || ((yp[j] <= y) && (y < yp[i]))) &&
            (x > (xp[j] - xp[i]) * (y - yp[i]) / (yp[j] - yp[i]) + xp[i]))
            c = !c;
    }
 
    return c;
}
 
int main()
{
 
    // ---------------------------------------
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "C:\Tc\BGI");
 
    // ---------------------------------------
 
    clrscr();
    int c, t, i, f, xp, yp, sp, up, n, z;
    long s1, s2, res1 = 0, res2 = 0, sq1 = 0, sq2 = 0;
 
    cout << "BBeguTe 4ucJIo BepLLIuH nePBoro MHoroyroJIbHuKa:" << endl;
    cin >> n;
 
    cout << "BBeguTe KoopguHaTbI nePBoro MHoroyroJIbHuKa:" << endl;
    for (i = 0; i < n; i++)
    {
        cin >> x[i]; // координата x
        cin >> y[i]; // координата y
    }
 
    cout << "BBeguTe 4ucJIo BepLLIuH BToporo MHoroyroJIbHuKa:" << endl;
    cin >> z;
 
    cout << "BBeguTe KoopguHaTbI BToporo MHoroyroJIbHuKa:" << endl;
    for (i = 0; i < z; i++)
    {
        cin >> u[i]; // координата x
        cin >> s[i]; // координата y
    }
 
    // построение на экране первого многоугольника
 
    for (i = 0; i < n; i++)
    {
        circle(x[i] + 150, y[i] + 150, 2);
        if (i == n - 1)
        {
            i = 0;
            line(x[i] + 150, y[i] + 150, x[n - 1] + 150, y[n - 1] + 150);
            break;
        }
        line(x[i] + 150, y[i] + 150, x[i + 1] + 150, y[i + 1] + 150);
    }
 
    // построение на экране второго многоугольника
 
    for (i = 0; i < z; i++)
    {
        circle(u[i] + 150, s[i] + 150, 2);
        if (i == z - 1)
        {
            i = 0;
            line(u[i] + 150, s[i] + 150, u[z - 1] + 150, s[z - 1] + 150);
            break;
        }
        line(u[i] + 150, s[i] + 150, u[i + 1] + 150, s[i + 1] + 150);
    }
 
    // Расчет площади первого многоугольника через сумму площадей трапеций
 
    for (i = 0; i < n; i++)
    {
        if (i == 0)
        {
            s1 = x[i] * (y[n - 1] - y[i + 1]); // если i == 0, то y[i-1] заменяем на y[n-1]
            res1 += s1;
        }
        else
            if (i == n - 1)
            {
                s1 = x[i] * (y[i - 1] - y[0]); // если i == n-1, то y[i+1] заменяем на y[0]
                res1 += s1;
            }
            else
            {
                s1 = x[i] * (y[i - 1] - y[i + 1]);
                res1 += s1;
            }
    }
 
    // Расчет площади второго многоугольника через сумму площадей трапеций
 
    for (i = 0; i < z; i++)
    {
        if (i == 0)
        {
            s2 = u[i] * (s[z - 1] - s[i + 1]); // если i == 0, то y[i-1] заменяем на y[z-1]
            res2 += s2;
        }
        else
            if (i == z - 1)
            {
                s2 = u[i] * (s[i - 1] - s[0]); // если i == z-1, то y[i+1] заменяем на y[0]
                res2 += s2;
            }
            else
            {
                s2 = u[i] * (s[i - 1] - s[i + 1]);
                res2 += s2;
            }
    }
 
    // Проверка принадлежности каждой точки первого многоугольника второму. В случае, если одна из точек не принадлежит
    // второму многоугольнику - в переменную c записываем -1 и выходим. Далее переменную c будем использовать как ключ
    for (i = 0; i < n; i++)
    {
        c = pnpoly(z, u, s, x[i], y[i]);
 
        if (c % 2 == 0)
        {
            c = -1;
            break;
        }
    }
 
    // Проверка принадлежности каждой точки второго многоугольника первому. В случае, если одна из точек не принадлежит
    // первому многоугольнику - в переменную t записываем -1 и выходим. Далее переменную t будем использовать как ключ
    for (i = 0; i < z; i++)
    {
        t = pnpoly(n, x, y, u[i], s[i]);
 
        if (t % 2 == 0)
        {
            t = -1;
            break;
        }
    }
 
    sq1 = abs(res1 / 2);
    sq2 = abs(res2 / 2);
    cout << "-------------" << endl;
    cout << "nJIoLLLagb nepBoro PaBHa: " << sq1 << endl;
    cout << "-------------" << endl;
    cout << "nJIoLLLagb BToporo PaBHa: " << sq2 << endl;
    cout << "c=" << c << "  t=" << t << endl;
 
    if (c >= 0)
        cout << "Perviy mnogougol'nik polnost'u lejit vo vtorom" << endl;
    else
        if (t >= 0)
            cout << "Vtoroy mnogougol'nik polnost'u lejit v pervom" << endl;
 
    getch();
    closegraph();
    return 0;
}
Где-то так... Провел два теста на двух квадратах - выдало правильный результат. В одном случае - один лежит внутри другого. Во втором случае - ничего не выдал, т.к. они никак не пересекаются.
 
Текущее время: 23:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru