.NET 4.x Площадь многоугольника - C#
Формулировка задачи:
Ребят тут у меня такая задача, два дня уже решаю и тут у меня появился косяк, как его можно подправить?
Дан плоский многоугольник координатами своих вершин. Определить площадь этого многоугольника.
я эту задачу разделил на два этапа. Первый это вычисление длины отрезка через координаты точек,
применяем теорему Пифагора 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).
Код:
подскажите пожалуйста
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); } } }
Решение задачи: «.NET 4.x Площадь многоугольника»
textual
Листинг программы
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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д