реклама на сайте
подробности

 
 
> подсчитать площадь кляксы
sergey sva
сообщение Oct 22 2013, 13:57
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Подскажите пожалуйста как подсчитать площадь кляксы? Площадь круга понятно как считать, а если это что то типа кляксы значение получено из ацп по всему периметру, цифры от 0 до 4096.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Oct 24 2013, 10:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



по-моему, все гораздо проще.
фигура нарисована на координатной плоскости, т.е. по сути известны целочисленные координаты каждой точки линии, ограничивающей ее контур, и сама площадь в пикселах будет только целочисленной, поэтому никакой тригонометрии и прочей плавающей точки в вычислениях!
итак, начинаем сканирование от нуля координат дисплея: для каждой строки с координатой Yi ищем точку контура кляксы (Xj,Yi) - если нашли, значит, эту строку дисплея фигура пересекает. найдя такую точку, продолжаем искать парную ей точку ПРАВЕЕ, т.е. точку с координатой (Xn,Yi) - если нашли, то определяем длину (она же площадь) полученного отрезка Si=Xn-Xj+1, затем продолжаем искать в той же строке очередную точку и т.д. в конечном итоге в строке y мы можем найти 1 или более отрезков по 2 точки, либо только 1 точку, либо ни одной. сумма длин всех отрезков (для одной точки длина 1) и будет площадью "сечения" кляксы в этой строке дисплея. затем повторяем для всех остальных строк, суммируя площади сечений - получаем площадь кляксы в пикселах. затем умножаем на площадь пиксела - и вуаля! имеем площадь кляксы.

алгоритм в сущности примитивнейший. если анализировать только массив точек контура кляксы (определенно, для каждой точки с координатой (Xj, Yi) обязательно должна найтись парная ей (Xn,Yi), раз фигура замкнутая), то будет даже очень нересурсоемко. но и в исходном варианте алгоритм не сильно требователен к ресурсам...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
RHnd
сообщение Oct 24 2013, 11:18
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Цитата(ARV @ Oct 24 2013, 14:50) *
по-моему, все гораздо проще.


Да, хороший целочисленный вариант и ни одного умножения. Единственная загвоздка - а точно ли даны все точки контурной линии? Если для какого-то значения Y точка пропущена, мало ли вдруг, то контур придется аппроксимировать прямой и начинать вычисления.

Даже более того. Предположим, для какого-то Y вы нашли три точки X: 5, 10, 50. Как определить, это однопиксельное касание в точке 5 и отрезок длинной 40, или отрезок длиной 5 и однопиксельное касание в точке 50? Или вообще три касания?
Go to the top of the page
 
+Quote Post
ARV
сообщение Oct 24 2013, 12:23
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(RHnd @ Oct 24 2013, 15:18) *
Да, хороший целочисленный вариант и ни одного умножения. Единственная загвоздка - а точно ли даны все точки контурной линии? Если для какого-то значения Y точка пропущена, мало ли вдруг, то контур придется аппроксимировать прямой и начинать вычисления.

Даже более того. Предположим, для какого-то Y вы нашли три точки X: 5, 10, 50. Как определить, это однопиксельное касание в точке 5 и отрезок длинной 40, или отрезок длиной 5 и однопиксельное касание в точке 50? Или вообще три касания?
да, по мере обдумывания сложность задачи возрастает sm.gif однако, по мере обдумывания и решения находятся так же. отличить касания можно путем сравнения с предыдущей или последующей строкой - если в текущей строке есть касание, то в следующей вблизи этой координаты либо останется одна точка, либо появится 2 или более.

в любом случае, начальный импульс для раздумий задан sm.gif
P.S. что ВСЕ точки даны - это исходное условие. если не все - надо сначала достроить контур.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   подсчитать площадь кляксы   Oct 22 2013, 13:57
- - RHnd   Вообще площадь произвольной замкнутой несамопересе...   Oct 22 2013, 14:03
- - sergey sva   Вот на таком примере: лежит экран сенсорный и на н...   Oct 22 2013, 14:48
|- - Xenia   Цитата(sergey sva @ Oct 22 2013, 18:48) В...   Oct 22 2013, 15:02
- - sergey sva   Это если известно разрешение экрана, а если нет, и...   Oct 22 2013, 15:18
- - cant   произвольную фигуру проще всего так, как описала X...   Oct 22 2013, 15:26
- - RHnd   Заливать всю площадь и считать интенсивность это о...   Oct 22 2013, 15:45
- - _Pasha   Polygon triangulation   Oct 22 2013, 16:10
- - Палыч   Цитата(sergey sva @ Oct 22 2013, 17:57) П...   Oct 22 2013, 16:32
|- - Fat Robot   Классическая задача для интегрирования методом Мон...   Oct 22 2013, 19:58
|- - Xenia   Цитата(Fat Robot @ Oct 22 2013, 23:58) Кл...   Oct 22 2013, 21:43
|- - Fat Robot   Залить и перебрать. это подход. Всё зависит от то...   Oct 22 2013, 22:56
- - RHnd   Подождите, а как вы предлагаете реализовывать зали...   Oct 24 2013, 09:10
|- - megajohn   Цитата(RHnd @ Oct 24 2013, 13:10) Зачем н...   Oct 24 2013, 09:18
|- - RHnd   Цитата(megajohn @ Oct 24 2013, 13:18) мож...   Oct 24 2013, 09:55
|- - megajohn   Цитата(RHnd @ Oct 24 2013, 13:55) Здорово...   Oct 24 2013, 10:26
- - Tarbal   Цитата(RHnd @ Oct 24 2013, 15:18) Единств...   Oct 24 2013, 13:20
- - RHnd   Цитата(Tarbal @ Oct 24 2013, 17:20) Тогда...   Oct 24 2013, 13:26


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.07953 секунд с 7
ELECTRONIX ©2004-2016