Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
.NET 4.x

Площадь многоугольника

09.05.2016, 13:23. Показов 4818. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят тут у меня такая задача, два дня уже решаю и тут у меня появился косяк, как его можно подправить?

Дан плоский многоугольник координатами своих вершин. Определить площадь этого многоугольника.

я эту задачу разделил на два этапа. Первый это вычисление длины отрезка через координаты точек,
применяем теорему Пифагора AB = √ ((X2-X1)²+(Y2-Y1)²).
а второй это по формуле Герона посчитать площадь многоугольник
S = √p(p - a)(p - b)(p - c)
где p полупериметр
p = a + b + c/2

начал тестировать, выяснилось что площадь треугольников считает правильно а вот многоугольников с погрешностью. Начал разбираться, получается я использую только один полупериметр, мне надо как то в многоугольнике определить все полупериметра и вставить их в формулу S = √p(p - a)(p - b)(p - c).

Код:
Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace mg
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] x = new int [10];
            int[] y = new int [10];
            double[] point = new double[10];
            double[] s = new double[10];
 
            int i, j = 0, k = 0;
            double ab, bc, ca, p = 0, sq = 0, st = 1, resp = 0;
 
            Console.WriteLine ("Введите количество вершин: ");
            int n = Int32.Parse(Console.ReadLine());
 
            Console.WriteLine("Введите координаты: ");
            for (i = 0; i < n; i++)
            {
                x[i] = int.Parse(Console.ReadLine()); // координата x
                y[i] = int.Parse(Console.ReadLine()); // координата y
            }
 
            foreach (var element in x)
            {
                Console.WriteLine("x = " + j + " " + element);
                j++;
            }
            foreach (var element in y)
            {
                Console.WriteLine("y = " + k + " " + element);
                k++;
            }
 
            for (i = 0; i < n; i++)
            {
                point[i] = Math.Sqrt(Math.Pow((y[i + 1] - y[i]), 2) + Math.Pow((x[i + 1] - x[i]), 2));
            }
 
            for (i = 0; i < n; i++)
            {
                Console.WriteLine("Длины сторон: " + point[i]);
            }
 
            //формула Герона
 
            for (i = 0; i < n; i++)
            {
                p = p + point[i]; //где p полупериметр
            }
            p = p / 2;
 
            Console.WriteLine("Полупериметр: " + p);
 
            for (i = 0; i < n; i++)
            {
                s[i] = p - point[i]; //вычитаем стороны периметр - стороны
            }
 
            for (i = 0; i < n; i++)
            {
                Console .WriteLine (s[i]); //вычитаем стороны ТЕСТ выводим на экран
            }
 
 
            for (i = 0; i < n; i++)
            {
                st = st * s[i]; //умножаем стороны
                Console.WriteLine("Умножаем все полученые стороны: " + st);
            }
 
            Console.WriteLine("все скобки умноженнные: " + st);
            
            sq = Math.Sqrt(p * st);
 
 
            Console.WriteLine("Площадь: " + sq);
            
        }
    }
}


подскажите пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.05.2016, 13:23
Ответы с готовыми решениями:

Найти площадь многоугольника с заданными координатами вершин
. Даны натуральное число n, действительные числа x(0), y(0), x(1), y(1),...,x(n), y(n). Найти площадь многоугольника, вершины...

Найти с помощью функции площадь, периметр и углы многоугольника
Многоугольник на плоскости задается координатами своих N вершин в порядке обхода их по контуру по часовой стрелке. Считается, что контур...

Найти площадь многоугольника, вершины которого при некотором обходе имеют заданные координаты
namespace ConsoleApplication53 { class Program { static int Input() { ...

4
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
09.05.2016, 14:09
Говорят вот так это делается

C#
1
2
3
4
5
6
var points = GetSomePoints();
 
points.Add(points[0]);
var area = Math.Abs(points.Take(points.Count - 1)
   .Select((p, i) => (points[i + 1].X - p.X) * (points[i + 1].Y + p.Y))
   .Sum() / 2);
http://stackoverflow.com/a/16281192
1
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
09.05.2016, 14:35  [ТС]
видел я такой, я метод не понял как он вычисляет, и по этому сам начал придумывать. Щас буду разбираться, охота конечно этот сценарий допилить
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.05.2016, 10:27
Как вариант:
Вычислить площадь произвольного многоугольника, нарисованного на форме
1
 Аватар для allukard
307 / 218 / 70
Регистрация: 08.11.2010
Сообщений: 1,899
10.05.2016, 18:55  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Как вариант:
Вычислить площадь произвольного многоугольника, нарисованного на форме
ого спасибо за информацию.

Кликните здесь для просмотра всего текста
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
private void button1_Click(object sender, EventArgs e)
        {
            txt_coor.Text  = "1;3,6;6,2;1";
            
            var sample = txt_coor.Text;
            var points = sample.Split(',');
 
            var x = new int[points.Length];
            var y = new int[points.Length];
 
            for (int i = 0; i < points.Length; i++)
            {
                var point = points[i].Split(';');
                if (point.Length != 2)
                {
                    MessageBox.Show("Вы неправильн ввели коордитаны");
                }
                x[i] = Convert.ToInt32(point[0]);
                y[i] = Convert.ToInt32(point[1]);
            }
 
            foreach (var element in x)
            {
                lsb_x.Items.Add(element);
            }
 
            foreach (var element in y)
            {
                lsb_y.Items.Add(element);
            }
            
           // int j;
            int s, res = 0;
            int n = points.Length;
 
            for (int i = 0; i < n; i++)
            {
 
                if (i == 0)
                {
                    s = x[i] * (y[n - 1] - y[i + 1]); //если i == 0, то y[i-1] заменяем на y[n-1]
                    res += s;
                }
                else
                    if (i == n - 1)
                    {
                        s = x[i] * (y[i - 1] - y[0]); // если i == n-1, то y[i+1] заменяем на y[0]
                        res += s;
                    }
                    else
                    {
                        s = x[i] * (y[i - 1] - y[i + 1]);
                        res += s;
                    }
            }
 
            res = Math.Abs(res / 2);
            textBox2.Text = Convert .ToString (res);
            
            
 
        }


пока считает)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.05.2016, 18:55
Помогаю со студенческими работами здесь

Найти объем, площадь основания, площадь боковой поверхности и площадь полной поверхности призмы
Здравствуйте , помогите пожалуйста, очень надо , буду очень благодарна! ЗАДАНИЕ по теме линейные программы: Используя систему...

По координатам вершин двух треугольников, определите их площадь и выведите на печать площадь максимального треугольника
По координатам вершин двух треугольников, определите их площадь и выведите на печать площадь максимального треугольника.Вычисление длины...

Определить площадь круга и найти площадь кольца
Здравствуйте! Надеюсь, что я правильно выбрал отдел. Мне нужно помочь написать программу. Написать функцию определения площади круга и...

Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и обьем этого куба.
Hi. Помогите решить задачи через C# (По возможности самый простой и правильный вариант решения) Сама задача - Дана длина ребра куба....

Заливка многоугольника
Написать программу на С# которая обеспечивает алгоритм заливки многоугольника построчно. Левой кнопкой ставятся точки, правой он замыкается...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru