![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
Ребят, всем здрасьте!))
Имею следующую проблему: на компоненте TChart строю графики из большой таблицы. В итоге графики получаются замкнутыми в одну фигуру. Необходимо найти площадь этой фигуры. Был бы алгоритм построения многоугольника - можно было бы проинтегрировать. А так - даже не знаю как действовать. Вот пример фигуры Присоединённый файл ( Кол-во скачиваний: 33 ) ![]() |
|||
|
||||
dimazu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 4.3.2006 Репутация: 4 Всего: 5 |
Сначала надо сделать интерполяцию верхней и нижней кривых.
Как? Читай про теорему Вейерштрасса, про линейную и квадратичную интерполяции, матан, короче... ![]() Потом просто вычислить интегралы верхней и нижней функций и взять их разность. Эта разность и будет искомой площадью. С определенной погрешностью, естессна... Я бы делал так: 1. Соединил бы 2 соседние точки прямой линией. Это линейная интерполяция. Далее плошадь вычисляется легко. Соединяем все пары точек и суммируем интегралы. Если надо оценить погрешность, то делай пункт 2. 2. Соединил бы 3 соседние точки параболой. Далее интегралы вичисляются просто и плошадь тоже. Я думаю, что разность результатов от этих двух подходов даст тебе оценку погрешности. Однако, судя по картинке линейной интерполяции будет более чем достаточно ![]() ЗЫ. Я просмотрел, если тебе надо площадь многогранника, то пункт 2 тебе вообще не нужен. Это сообщение отредактировал(а) dimazu - 17.3.2007, 08:03 |
|||
|
||||
Неопытный |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 21.11.2006 Репутация: нет Всего: нет |
Чего то я не припомню такой теоремы!? Напомните пожалуйста. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А я бы сделал шот с этой картинки, залил бы внутри одним цветом, снаружи другим, а потом бы просто посчитак кол-во пикселей внутри
![]() |
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
Snowy, это очень грубо. Точность сразу же привязывается к разрешению картинки....
-------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
dimazu, спасибо за совет, но первый курс математики вспоминается с трудом...
![]() Кто нибудь сможет помочь? А то уже приличная часть курсовика просчитана, бросать жалко... Да и никто кроме меня за него не возмется... |
|||
|
||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
Кстати, dimazu, если использовать твой способ, то мне необходимо знать функции для каждой линии. Но у меня есть только координаты точек. Как из координат вычислить функцию?
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
-------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
dimazu |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 4.3.2006 Репутация: 4 Всего: 5 |
Oй как все запущено... ![]() По-моему это школьная программа... ![]() Нам известны 2 точки с координатами (х1,у1) и (х2, у2) и неизвестен угловой коэффициент. Получим нужную функцию: y = y1 + (x - x1)*(y2 - y1) / (x2 - x1) ЗЫ. А насчет интегрирования ты уж давай сам. ![]() Это сообщение отредактировал(а) dimazu - 18.3.2007, 08:33 |
|||
|
||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
dimazu, спасибо за помощь, но поздно
![]() ![]() и интеграл пришлось самому писать... точнее, функцию. в общем, с этой бедой разделался. теперь новая появилась... ![]() Добавлено @ 22:57 И всем остальным тоже огромное спасибо за помощь ![]() |
|||
|
||||
FireSnake |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 201 Регистрация: 15.9.2006 Где: Украина, Донецк Репутация: 1 Всего: 1 |
Насколько я понял, фигура без самопересечений и нам известны координаты вершин. Тогда все просто. Считаем площадь методом трапеций. А именно:
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 пару ![]() ![]() Это сообщение отредактировал(а) FireSnake - 19.3.2007, 09:59 |
|||
|
||||
Delvish |
|
|||
![]() oO ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 13.12.2006 Репутация: 1 Всего: 4 |
FireSnake, спасибо, но как то ты запутанно объяснил.... Я сделал проще.
Коэффициент k (для уравнения прямой) это (y2-y1)/(x2-x1) Коэффициент b = y1 - k*x1 После этого простое интегрирование с пределами от x2 до x1 по формуле Ньютона-Лейбница ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |