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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа нахождения максимумов в диагоналях матрицы 5х5 http://www.cyberforum.ru/cpp-beginners/thread188170.html
Помогите пожалуйста решить задачу: Написать на СИ программу нахождения максимумов в диагоналях матрицы 5х5
C++ Вычислить сумму элементов массива Вычислить сумму элементов массива а1+...+аn на языке Си. заранее спасибо http://www.cyberforum.ru/cpp-beginners/thread188166.html
C++ Кольцевые Списки.
Люди помогите. Понимаю что программы здесь никто не пишет. Но все же. Не могу разобраться. Вот задание. Реализовать функции очереди типа кольцо. Вывод всех элементов, чтобы было видно где маркер. Движение маркера по часовой стрелке. Добавление после маркера, удаление после маркера. Никак не могу понять как это реализовать в Си.
C++ "Приближенное вычисление интеграла"
Задание 1.9 Числовые данные под буквой "б" Извините за плохое фото, но вроде читаемо
C++ Найти обратную матрицу и умножить ее на вектор http://www.cyberforum.ru/cpp-beginners/thread188159.html
Очень нужна помощь для нахождения обратной матрицы на С++. Дело в том что мне нужно реализовать такую задачу: найти обратную матрицу и умножить ее на вектор. каким методом лучше находить обратную матрицу и какой алгоритм нахождения...помогите пожалуйста.
C++ Реализовать транслитерацию строки задача№1 Дан текст в строке.Сделать транслитерацию єтой строки. задача №2 дан текст строки. Если в строке больше одного знака арифметической операции, то уменьшить последовательность до одного.( например, 3+++++7 заменить на 3+7, если 3+ * 9 то оставить 3+*9) подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
09.11.2010, 09:46     Определить процедуру вычисления площади треугольника по координатам его вершин
Еще один вариант для выпуклого многоугольника:
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
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <complex>
#include <functional>
#include <iostream>
#include <numeric>
#include <vector>
//////////////////////////////////////////////////////////////////////////////////////
typedef double                  T_coord;
typedef std::complex<T_coord>   T_vertice;
typedef std::vector<T_vertice>  T_vertices;
typedef std::vector<T_coord>    T_triangle_areas;
//////////////////////////////////////////////////////////////////////////////////////
T_coord  det(T_vertice  A, T_vertice  B)
{
    return  A.real() * B.imag() - B.real() * A.imag();
}
//////////////////////////////////////////////////////////////////////////////////////
struct  T_get_triangle_area
{
    T_coord  operator() (T_vertice  A, T_vertice  B)
    {
        return  abs(det(A, B)) / 2.0;
    }
};
//////////////////////////////////////////////////////////////////////////////////////
T_coord  get_polygon_area(const T_vertices&  polygon_vertices)
{
    //Находим набор (n - 1) векторов с началом в первой вершине, и концами в каждой
    //из остальных.
    T_vertices  polygon_vectors(polygon_vertices.size() - 1);
 
    std::transform
        (
            polygon_vertices.begin() + 1, polygon_vertices.end(), 
            polygon_vectors.begin(),             
            std::bind2nd(std::minus<T_vertices::value_type>(), polygon_vertices.front())
        );
 
    //Теперь находим площади треугольников, образованных соседними векторами, 
    //и складываем их.  
    return std::inner_product
               (
                   polygon_vectors.begin(), polygon_vectors.end() - 1,
                   polygon_vectors.begin() + 1, 0.0, 
                   std::plus<T_coord>(), T_get_triangle_area()
               );
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    const int VERTICES_COUNT_MIN = 3;
    int n = 0;
    do
    {
        std::cout << "Введите число вершин многоугольника >= "
                  << VERTICES_COUNT_MIN
                  << ": ";
 
        std::cin >> n;    
    }while(n < VERTICES_COUNT_MIN);
 
    std::cout << "Введите координаты "
              << n
              << " вершин выпуклого многоугольника"
              << std::endl
              << "(в порядке последовательного обхода границы):"
              << std::endl;
 
    T_vertices  polygon_vertices;
    for(int i = 0; i < n; ++i)
    {
        std::cout << std::endl
                  << '\t'
                  << "X"
                  << i + 1
                  << " = ";
 
        T_coord  X = 0;        
        std::cin >> X;        
 
        std::cout << '\t'
                  << "Y"
                  << i + 1
                  << " = ";
 
        T_coord  Y = 0;        
        std::cin >> Y;
 
        polygon_vertices.push_back(T_vertice(X, Y));
    }
 
    std::cout << "Площадь заданного выпуклого "
              << n
              << "-угольника равна: "
              << get_polygon_area(polygon_vertices)
              << std::endl;             
}
 
Текущее время: 16:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru