Нахождение области между двумя кривыми (каждая состоит из массива точек) - PullRequest
1 голос
/ 27 июля 2011

Я пишу приложение для Android, которое сканирует изображение и создает своего рода гистограмму из указанного изображения, а затем позволяет пользователю перетаскивать базовую линию из заранее определенного числа точек. Я закончил эти части, но теперь мне нужно иметь возможность оценить интеграл между 1000 или около того точками отсканированного изображения и заданной пользователем базовой линией, состоящей из любого количества точек, за заданный интервал (вероятно, будет решаться алгоритм, который решает, где максимальные / минимальные значения и точки перегиба). Каждый массив точек определяет одну линию.

Существует ли какая-либо библиотека, которая будет принимать массивы Point [] и находить оценочную площадь между двумя строками? Или мне нужно написать собственный алгоритм, чтобы справиться с этим? Я посмотрел на общую математику apache, но, похоже, ей нужно было передать математическую функцию, чтобы найти интеграл.

редактирование:
строка 1 представляет собой массив из около 1000 точек (зависит от разрешения изображения) {(0,5), (1,10), (2,11), (3,9), .... (1000,12)}

строка 2 может быть 5 баллов (пользователь решает): {(0,5), (250,9), (500,7), (750,8), (1000,5)}

Реальные значения y будут намного больше, но это общая идея.

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

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

1 голос
/ 27 июля 2011

Не уверен, что понимаю, что вы хотите.

но я подумал о 2 вещах:

Если вы хотите вычислить интеграл гистограммы, из n точек(xi, yi = f (xi)) вы можете использовать интеграл Римана для получения значения.

со следующей формулой: enter image description here

Это другое представлениеинтегралов Ринмана, таких как трапеции, а не гистограммы и т. д. ...

например, если ti=(xi+xi+1)/2 вы получите трапеции

Другая возможность:

Вы можете использовать полином для интерполяции 1000 значений.

Вы получите функцию f такую, что f (xi) = yi для всех ваших (xi, yi) точек.

Затем вычислите интеграл от полиномиальной функции (легко, так как выможет найти явный примитив)

пример :

, если P - полином

I, интеграл

p, примитивP

I = p (xmax) -p (xmin)

Примечание:

Если у вас 2 строки, просто вычтите одну целую издругие.

Надеюсь, я понял вопрос, и это помогает

...