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

Площадь произвольного многоугольника с проверкой на пересечения - C++

Восстановить пароль Регистрация
 
DobroAbdulova
0 / 0 / 0
Регистрация: 01.03.2014
Сообщений: 11
15.11.2015, 12:10     Площадь произвольного многоугольника с проверкой на пересечения #1
Площадь произвольного многоугольника. Даны натуральное число n, действительные числа x1,y1,x2,y2,...,xn,yn. Найти площадь n-угольника произвольной конфигурации, вершины которого при некотором последовательном обходе имеют координаты (x1,y1),(x2,y2),...,(xn,yn). Реализовать проверку корректности исходных данных в подпрограмме.

Все бы хорошо нашлось по формуле, но нужна проверка на самопересечение или что-то подобное. Я пытался сделать проверку по уравнению прямой на плоскости(x-x1/x2-x1=y-y1/y2-y1), но запутался. Помогите хотя бы проверку до ума довести. Идея какая: нужно решить систему из двух таких уравнений 2x-1=2y-1. xk - коэффициент при x, xd - добавка к x (тут она 1), аналогично и для правой части (только для y), и для второго уравнения.

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
#include <string>
#include <iostream>
 
using namespace std;
 
int main(){
    int x1 = 1,x2 = 3,y1 = 1,y2 = 3;
    int a1 = 1,b1 = 3,a2 = 1,b2 = 3;
    int x3,y3;
    
    int xk, yk, xd, yd;
    int ak, bk, ad, bd;
    bk = a2 - a1;
    ak = b2 - b1;
    yk = x2-x1;
    xk = y2-y1;
    
    int buff;
    
    bd = ((a2-a1)*(-b2)+a1*(b2-b1))/(b2-b1);
    cout << "Now " << bd << endl;
    ad = ((b2-b1)*(-a2)+b1*(a2-a1))/(a2-a1);
    cout << "Now " << ad << endl;
    yd = ((x2-x1)*(-y2)+x1*(y2-y1))/(y2-y1);
    xd = ((y2-y1)*(-x2)+y1*(x2-x1))/(x2-x1);
    
    bk = -bk;
    yk = -yk;
    xd = -xd;
    bd = -bd;
    
    cout << "+ pri y " << yd << endl;
    cout << "+ pri x " << xd << endl;
    cout << "Coef pri x " << xk << endl;
    cout << "Coef pri y " << yk << endl;
    cout << "+ pri b " << bd << endl;
    cout << "+ pri a " << ad << endl;
    cout << "Coef pri b " << bk << endl;
    cout << "Coef pri a " << ak << endl;
    
    //ad+=bd;
    cout << xk << endl;
    //xk+=yk*ak/bk;
    //xd+=-yk*((bd+ad)/bk);
    cout << "xk " << xk << endl;
    cout << "xd " << xd << endl;
    //cout << xd/xk;
    /*
    yk=yk+xk*bk/ak;
    cout << yk;
    buff = xd+yd+xk*(bd-ad);
    
    //x3 = buff/yk; // ((yd*xk+xd)+xd)/(xk*yk-1)
    //y3 = ((yd*xk+xd)+xd)/(xk*yk-1);
    cout << x3;
    */
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2015, 12:10     Площадь произвольного многоугольника с проверкой на пересечения
Посмотрите здесь:

Площадь многоугольника C++
Площадь многоугольника C++
C++ Количество точек с целочисленными координатами внутри (не включая границ) произвольного многоугольника
Программа должна находить площадь произвольного многоугольника C++
найти площадь многоугольника C++
C++ Вычислить площадь простого многоугольника
Вычислить площадь многоугольника C++
Площадь многоугольника C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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