Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вычисление площади произвольной фигуры


Автор: Delvish 17.3.2007, 03:47
Ребят, всем здрасьте!))

Имею следующую проблему: на компоненте TChart строю графики из большой таблицы. В итоге графики получаются замкнутыми в одну фигуру. Необходимо найти площадь этой фигуры. Был бы алгоритм построения многоугольника - можно было бы проинтегрировать. А так - даже не знаю как действовать.
Вот пример фигуры 

Автор: dimazu 17.3.2007, 05:08
Сначала надо сделать интерполяцию верхней и нижней кривых.
Как? Читай про теорему Вейерштрасса, про линейную и квадратичную 
интерполяции, матан, короче...    smile 

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

Я бы делал так:

1. Соединил бы 2 соседние точки прямой линией. 
    Это линейная интерполяция. 
    Далее плошадь вычисляется легко.
    Соединяем все пары точек и суммируем интегралы.
    Если надо оценить погрешность, то делай пункт 2.

2. Соединил бы 3 соседние точки параболой. 
   Далее интегралы вичисляются просто и плошадь тоже. 
  Я думаю, что разность результатов от этих двух подходов даст 
  тебе оценку погрешности.

Однако, судя по картинке линейной интерполяции будет более чем
достаточно  smile  

 ЗЫ. Я просмотрел, если тебе надо площадь многогранника, то пункт 2 
       тебе вообще не нужен.

Автор: Неопытный 17.3.2007, 08:09
Цитата

Сначала надо сделать интерполяцию верхней и нижней кривых.
Как? Читай про теорему Вейерштрасса, про линейную и квадратичную 
интерполяции,

Чего то я не припомню такой теоремы!? Напомните пожалуйста.

Автор: Snowy 17.3.2007, 10:22
А я бы сделал шот с этой картинки, залил бы внутри одним цветом, снаружи другим, а потом бы просто посчитак кол-во пикселей внутри smile

Автор: SparF 17.3.2007, 10:30
Snowy, это очень грубо. Точность сразу же привязывается к разрешению картинки....

Автор: Delvish 17.3.2007, 14:52
dimazu, спасибо за совет, но первый курс математики вспоминается с трудом... smile не мог бы по подробней рассказать как это сделать? Кстати, метод, предложеный Snowy, не есть ли столь же верный путь к нахождению площади? Но и этот метод мне никак не удается вспомнить...
Кто нибудь сможет помочь? А то уже приличная часть курсовика просчитана, бросать жалко... Да и никто кроме меня за него не возмется...

Автор: 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
Цитата(Delvish @ 17.3.2007,  17:48)
Кстати, dimazu, если использовать твой способ, то мне необходимо знать функции для каждой линии. Но у меня есть только координаты точек. Как из координат вычислить функцию?

Oй как все запущено... smile 

По-моему это школьная программа... smile 

Нам известны 2 точки с координатами (х1,у1) и (х2, у2)
и неизвестен угловой коэффициент.

Получим нужную функцию:

y = y1 + (x - x1)*(y2 - y1) / (x2 - x1)

ЗЫ. А насчет интегрирования ты уж давай сам.  smile 



Автор: Delvish 18.3.2007, 22:54
dimazu, спасибо за помощь, но поздно smile я уже вспомнил эту формулу smile
и интеграл пришлось самому писать... точнее, функцию. в общем, с этой бедой разделался. теперь новая появилась... smile

Добавлено @ 22:57 
И всем остальным тоже огромное спасибо за помощь smile

Автор: 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 паруsmile надеюсь не сильно будут крепитьsmile

Автор: Delvish 20.3.2007, 17:04
FireSnake, спасибо, но как то ты запутанно объяснил.... Я сделал проще.
Коэффициент k (для уравнения прямой) это (y2-y1)/(x2-x1) 
Коэффициент b = y1 - k*x1
После этого простое интегрирование с пределами от x2 до x1 по формуле Ньютона-Лейбница smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)