Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.84
Hamelion)))
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 24
#1

Определить процедуру вычисления площади треугольника по координатам его вершин - C++

23.03.2011, 11:01. Просмотров 6142. Ответов 17
Метки нет (Все метки)

Даны натуральное число n, действительные числа x1, y1, x2, y2,…, xn,yn. Найти площадь
n-угольника,вершины которого при некотором последовательном обходе имеют координаты (x1, y1), (x2, y2),…, (xn, yn). (Определить процедуру вычисления площади треугольника по координатам его вершин.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 11:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить процедуру вычисления площади треугольника по координатам его вершин (C++):

Определить процедуру вычисления площади треугольника по координатам его вершин - C++
Даны натуральное число n, действительные числа x1, y1, x2, y2,..., xn, yn. Найти площадь n угольника, вершины которого при некотором...

Составить функцию вычисления площади треугольника по координатам вершин - C++
Ребят, спасайте, завтра на экзамен нужно принести эту задачку.. Не знаю что делать) Помогите, чтобы программа была написана на начальном...

Нахождение площади параллелограмма, треугольника и объема параллелепипеда, тетраэдра по координатам вершин - C++
Нахождение площади параллелограмма, треугольника и объема параллелепипеда, тетраэдра по координатам вершин. Задается пользователем:...

Определить функцию вычисления площади треугольника по трем его сторонами, заданными действительными числами - C++
Условие: Даны действительные числа a, b, c, d. Найти площадь шестиугольника, изображенного на рис. 4.1. Определить функцию вычисления...

Вычислить периметр и площадь треугольника по заданным координатам его вершин - C++
Помогите решить задачу! Вычислить периметр и площадь треугольника по заданным координатам его вершин.

Определить вид треугольника по координатам вершин - C++
Задача 2 : Задача на строки. Даны координаты трех точек на плоскости. Если они могут быть вершинами треугольника, определите его вид(...

17
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:06 #2
Решение содержится в постановке задачи: Разбиваешь многоугольник на треугольники, считаешь их площади и суммируешь.
(Вычисление площади треугольника выносишь в функцию.)
0
Alex1234
13 / 13 / 0
Регистрация: 11.02.2011
Сообщений: 55
23.03.2011, 11:21 #3
Не простая задача. http://www.opita.net/node/12
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 11:29 #4
Возможность триангуляции плоского многоугольника математически доказана и, соответственно, реализуема.

Если не издеваться, то:
Разбить произвольный многоугольник на множество выпуклых многоугольников. О минимизации количества выпуклых многоугольников ведь речи нет, так что задача простая.
Разбить каждый выпуклый многоугольник на треугольники (веером).
Считать площади.
Сложить.
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
23.03.2011, 16:44 #5
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
#include <iostream>
#include <vector>
 
using namespace std;
 
float sq (vector <pair <int, int> > &dil)
{
    float res = 0;                  
    for (unsigned i = 0; i < dil.size(); i++)
    {
       pair <int, int> one, two;     
        one = i ? dil[i-1] : dil.back();
        two = dil[i];               
        res += (one.first - two.first) * (one.second + two.second)                      
    }
    return fabs (res) / 2;            
}
 
int main()
{
   vector <pair <int, int> > dil;     
   int N;                 
   cin >> N;                       
   while (N)
   {
      int x, y;
      cin >> x >> y;
      dil.push_back(make_pair(x, y)); 
      N--;
   }
    cout << sq(dil) << endl;
   return 0;
}
1
Alex1234
13 / 13 / 0
Регистрация: 11.02.2011
Сообщений: 55
23.03.2011, 18:11 #6
Цитата Сообщение от Deviaphan Посмотреть сообщение
Возможность триангуляции плоского многоугольника математически доказана и, соответственно, реализуема.
Разбить произвольный многоугольник на множество выпуклых многоугольников. О минимизации количества выпуклых многоугольников ведь речи нет, так что задача простая.
Разбить каждый выпуклый многоугольник на треугольники (веером).
Считать площади.
Сложить.
Это кому как, мне на эту тему даже думать показалось сложно.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 18:19 #7
Mayonez, я не вчитывался, но похоже, что только для выпуклых многоугольников метод работает.
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
23.03.2011, 18:21 #8
Если многоугольник простой, то вполне можно воспользоваться формулой, приведенной здесь: Площадь простого n-угольника Жаль, что про эту формулу почти везде уже забыли.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 18:23 #9
А если многоугольник - квадрат, то...
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
23.03.2011, 18:38 #10
То значит, что квадрат - тоже простой многоугольник, а значит формула работает. Или вы о чём-то ином?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 18:41 #11
О сложности вычисления площади квадрата...
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
23.03.2011, 18:42 #12
Согласен, что не оптимально совсем выйдет, но за общность метода приходится платить, а тут как я понимаю задача имеет как раз обобщенный вид, не одни же квадраты считаем
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
23.03.2011, 18:42 #13
Deviaphan, для невыпуклых тоже за счет отрицательной площади
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 18:46 #14
Круто! Не знал.) Сохраню алгоритмик, на всякий пожарный.)
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
23.03.2011, 18:48 #15
главное - без самопересечений т.е. простой. Порядок обхода тоже неважен
0
23.03.2011, 18:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2011, 18:48
Привет! Вот еще темы с ответами:

Разработать методы вычисления длины отрезка по координатам вершин и периметра треугольника по длинам сторон - C++
Разработать метод f(x1, y1, x2, y2), который вычисляет длину отрезка по координатам вершин (x1, y1) и (x2, y2), и метод d(a, b, c),...

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

Нахождение площади треугольника через координаты его вершин - C++
На вход даются шесть чисел — координаты вершин. Найти площадь. Знаю, что бесконечно много раз спрашивали про такую программу, но поиск по...

Найти периметр треугольника, определив функцию, рассчитывающую длину отрезка по координатам его вершин - C++
Найдите периметр треугольника, заданного координатами вершин, определив функцию, рассчитывающую длину отрезка по координатам его вершин. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.