| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Вычисление площади произвольной фигуры |
| Автор: Delvish 17.3.2007, 03:47 |
| Ребят, всем здрасьте!)) Имею следующую проблему: на компоненте TChart строю графики из большой таблицы. В итоге графики получаются замкнутыми в одну фигуру. Необходимо найти площадь этой фигуры. Был бы алгоритм построения многоугольника - можно было бы проинтегрировать. А так - даже не знаю как действовать. Вот пример фигуры |
| Автор: dimazu 17.3.2007, 05:08 |
| Сначала надо сделать интерполяцию верхней и нижней кривых. Как? Читай про теорему Вейерштрасса, про линейную и квадратичную интерполяции, матан, короче... Потом просто вычислить интегралы верхней и нижней функций и взять их разность. Эта разность и будет искомой площадью. С определенной погрешностью, естессна... Я бы делал так: 1. Соединил бы 2 соседние точки прямой линией. Это линейная интерполяция. Далее плошадь вычисляется легко. Соединяем все пары точек и суммируем интегралы. Если надо оценить погрешность, то делай пункт 2. 2. Соединил бы 3 соседние точки параболой. Далее интегралы вичисляются просто и плошадь тоже. Я думаю, что разность результатов от этих двух подходов даст тебе оценку погрешности. Однако, судя по картинке линейной интерполяции будет более чем достаточно ЗЫ. Я просмотрел, если тебе надо площадь многогранника, то пункт 2 тебе вообще не нужен. |
| Автор: Неопытный 17.3.2007, 08:09 | ||
Чего то я не припомню такой теоремы!? Напомните пожалуйста. |
| Автор: Snowy 17.3.2007, 10:22 |
| А я бы сделал шот с этой картинки, залил бы внутри одним цветом, снаружи другим, а потом бы просто посчитак кол-во пикселей внутри |
| Автор: SparF 17.3.2007, 10:30 |
| Snowy, это очень грубо. Точность сразу же привязывается к разрешению картинки.... |
| Автор: Delvish 17.3.2007, 14:52 |
| dimazu, спасибо за совет, но первый курс математики вспоминается с трудом... Кто нибудь сможет помочь? А то уже приличная часть курсовика просчитана, бросать жалко... Да и никто кроме меня за него не возмется... |
| Автор: Delvish 17.3.2007, 17:48 |
| Кстати, dimazu, если использовать твой способ, то мне необходимо знать функции для каждой линии. Но у меня есть только координаты точек. Как из координат вычислить функцию? |
| Автор: SparF 17.3.2007, 19:05 |
| Если есть точки, значит есть многоугольник)) Решение обсуждалось http://forum.vingrad.ru/topic-115459/hl/%25D0%25BF%25D0%25BB%25D0%25BE%25D1%2589%25D0%25B0%25D0%25B4%25D1%258C/index.html |
| Автор: dimazu 18.3.2007, 07:45 | ||
Oй как все запущено... По-моему это школьная программа... Нам известны 2 точки с координатами (х1,у1) и (х2, у2) и неизвестен угловой коэффициент. Получим нужную функцию: y = y1 + (x - x1)*(y2 - y1) / (x2 - x1) ЗЫ. А насчет интегрирования ты уж давай сам. |
| Автор: Delvish 18.3.2007, 22:54 |
| dimazu, спасибо за помощь, но поздно и интеграл пришлось самому писать... точнее, функцию. в общем, с этой бедой разделался. теперь новая появилась... Добавлено @ 22:57 И всем остальным тоже огромное спасибо за помощь |
| Автор: FireSnake 19.3.2007, 09:58 |
| Насколько я понял, фигура без самопересечений и нам известны координаты вершин. Тогда все просто. Считаем площадь методом трапеций. А именно: 1. задаем вершины в порядке обхода (1 вершина = последней). 2. по каждым двум подряд идущим точкам (циклом) строим трапецию, считаем ее площадь и прибавляеем к некой переменной скажем S. Все, S это и есть искомая площадь. Как строится трапеция. Как известно, Sтрапеции=(средняя линия)*(высоту). Звездочки - точки, координаты их известны. Две точкки нам известны, еще две - это с координатами (x1,0); (x2,0); По ним строим трапецию. * / | / | /| | / | | * | | | | | | | | | | | |_ |_|_______->(ox) Высота это x1-x2 ср.линия это: Xcл1:=x1-x2; Xcл2:=x1-x2; Yсл1:=0; Yсл2:=(y1+y2)/2; Длина средней линнии это длина отрезка (Хсл1,Yсл1,Xсл2,Ycл2); В процессе обхода площадь тех трапеций , которую надо вычитать из полученной, будет отрицательной, а тех что прибавлять - положительной. Так же еще задавать обход надо всегда строго в одном порядке - по часовой, или против. Иначе итоговая площадь может выйти со знаком минус. P.S. Пока писал пост, опаздал на 2 пару |
| Автор: Delvish 20.3.2007, 17:04 |
| FireSnake, спасибо, но как то ты запутанно объяснил.... Я сделал проще. Коэффициент k (для уравнения прямой) это (y2-y1)/(x2-x1) Коэффициент b = y1 - k*x1 После этого простое интегрирование с пределами от x2 до x1 по формуле Ньютона-Лейбница |