|
Определение площади фигуры и ее периметра | ☑ | ||
|---|---|---|---|---|
|
0
Торин
13.02.06
✎
15:20
|
Уважаемые коллеги!
Изините за офф-топик, но больше спросить негде. Большинство из вас до 1С тоже на чем-то программировали. Очень нужно решение вот такой задачки (ну если не решение, то хотя бы экспертная оценка его возможности): есть bitmap-файл. В нем содержится изображение плоской фигуры, напоминающей слегка деформированный круг. Цветность - бит на цвет (черный-белый). Требуется определить площадь фигуры и ее периметр. Пренебречь деформированностью нельзя, ибо конечной задачей является именно оценка степени отличия данной фигуры от правильного круга... Задача может быть решена ЛЮБЫМИ средствами - любой язык, любая операционка и т.д. Главное - программа должна работать полностью автоматически, без диалога с пользователем |
|||
|
1
Vozhd
13.02.06
✎
15:29
|
(0) Можно посчитать количество точечек...
|
|||
|
2
Бешенная Нога
13.02.06
✎
15:29
|
2 цвета церный и белый?
|
|||
|
3
Торин
13.02.06
✎
15:31
|
да. тока два цвета. Идея именно в том, что посчитать количество точек, но это тока площадь. А периметр? Нужно посчитать т.н. "пограничные" точки. а вот что это такое - "пограничные точки"?
|
|||
|
4
Волшебник
модератор
13.02.06
✎
15:32
|
(0) Для Волшебного форума - это не Офф-топик, так что извиняться не за что.
|
|||
|
5
Торин
13.02.06
✎
15:33
|
т.е точки, которые контактируют с другим цветом. Но как это определить...
|
|||
|
6
Vozhd
13.02.06
✎
15:33
|
(5) проверить соседние точки
|
|||
|
7
igork1966
13.02.06
✎
15:34
|
(3) Думаю белые точки у которых есть черные соседи.
|
|||
|
8
Торин
13.02.06
✎
15:35
|
дайте, плиз, ссылку на информацию типа "форматы графических файлов". И еще - на чем лучше всего попробывать такое написать?
|
|||
|
9
Бешенная Нога
13.02.06
✎
15:36
|
если ты найдешь площать круга который внутри прямоугольника,
то периметрКруга=ПериметрПрямоугольника*ПлощальКруга/ПлощадьПрямоугольника |
|||
|
10
igork1966
13.02.06
✎
15:37
|
(8) google тебе поможет. Выдает кучу ссылок. Лень фразу написать?
http://jenyay.wallst.ru/index.php?id=bmp |
|||
|
11
igork1966
13.02.06
✎
15:37
|
(9) "слегка деформированный круг." "Пренебречь деформированностью нельзя,"
|
|||
|
12
airyashov
13.02.06
✎
15:38
|
да что писать на дельфе битмап и вперед по точкам
а вот как оценить деформацию, что значи неправильный круг, овал, эллипс или что-то иное |
|||
|
13
Торин
13.02.06
✎
15:38
|
(12)круг со слегка "изъеденными" краями
|
|||
|
14
AeDen
13.02.06
✎
15:38
|
(7) А черная полоса, с двух сторон которой - белое поле. И полоса шириной 1-10 точек...
|
|||
|
15
igork1966
13.02.06
✎
15:41
|
(14) В (0) ихмо предпологается отсутствие дефектов закраски. (Если я правильно понял тебя и автора)
|
|||
|
16
igork1966
13.02.06
✎
15:43
|
(15) + можно "дефекты" построчно предварительно закрасить.
|
|||
|
17
Торин
13.02.06
✎
15:43
|
Давайте я уточню, откуда взялась задача. Анализируется новый способ печати - лазерный луч, но жидкая краска. необходимо оценить качество полученных точек. используется два критерия - распределение оптической плотности на точке и степень отличия точки от правильного круга...
вот для этой второй задачи и нужна эта программка. Дефектов закраски нет. предполагается что внутри круга "дырочек" нет. И не тока предполагется. Визуально, просмотрев несколько сотен отпечатков подтверждаю - нет. |
|||
|
18
smaharbA
13.02.06
✎
15:44
|
Думаю в акаде или в 3дс возможно, там и скриптовый язык есть и приблуды что такие весчи в шейпы конвертят, можно и автоматом наверно сделать
|
|||
|
19
Deon
13.02.06
✎
15:47
|
(17) А зачем периметр? Чем он меньше, тем лучше?
|
|||
|
20
Торин
13.02.06
✎
15:49
|
Известно, что для данной площади минимальным периметром обладает именно правильный круг. Поэтому это и взято как критерий близости отпечатка к правильному кругу...
|
|||
|
21
Токс
13.02.06
✎
15:54
|
Так, вроде... математичка, интегральчики...
Периметр - сумма поверхностных точек, а площадь - сумма длин отрезков... |
|||
|
22
Mort
13.02.06
✎
15:54
|
(0) И в каких единицах периметр? Если круг рассматривать как нарисованный из квадратов то его периметр будет равен 4*R*R всегда как бы плохо он не был нарисован.
|
|||
|
23
Торин
13.02.06
✎
15:59
|
для того, чтоб тут было что интегрировать, необходимо вначале задать функцию... пусть даже таблично...
А отпечатков несколько тысяч... Идея какая: посчитать пиксели, умножить на масштаб (dpi (dot per inch) - количество пикселей на дюйм) и так получить и площадь и периметр. вот тока КАК все это сделать? |
|||
|
24
Токс
13.02.06
✎
16:12
|
Проблемы то нет...
Вертикально разлагаешь на отрезочки шириной в пиксель и пошел считать... Площадь - сумма длин черных отрезков (на белом фоне), а для периметра надо ещё теорему Пифагора вспомнить... За скорость на Делфе ничего сказать не могу, но картинку она разложит... ЗЫ Я б подождал smaharbA... щас из 1С замутит, он такой... |
|||
|
25
igork1966
13.02.06
✎
16:17
|
Найти первую белую точку. Найти любую соседнюю имеющую >1 черного соседа.
Далее найти аналогично соседнюю(>1 черного соседа) исключив предыдущую из рассмотрения. Расстояние по теореме пифагора. Пока не дойдем до начальной точки. |
|||
|
26
Торин
13.02.06
✎
16:29
|
спасибо, начал кодить на дельфях... Правда, года два за них не садился.. Но глядишь, не все еще позабыл...
|
|||
|
27
Торин
13.02.06
✎
16:30
|
Обязательно напишу результат. Но видимо, не раньше чем завтра...
|
|||
|
28
Shaman100M
13.02.06
✎
16:38
|
Можно вычислить пикселы, имеющие не более 6 "черных" соседей - это край окружности, дальше построить многоугольник по центрам пикселей / нижним правым точкам и посчитать его периметр. Можно оптимизировать выбор вершины будущего многоугольника как наиболее удаленной точки пиксела от центра..
|
|||
|
29
Иде я
13.02.06
✎
16:40
|
А что - толщина круга будет 1 пиксель ?!!!
Не верю!! |
|||
|
30
Иде я
13.02.06
✎
16:41
|
Т.е. окружности
|
|||
|
31
Череп
13.02.06
✎
16:43
|
Чуть более широкая задача решалась на всеросийской олимпеаде по программированию года 99 или 2000. Можншь поискать решение.
|
|||
|
32
igork1966
13.02.06
✎
16:47
|
(27) Черт, есть ситуэшен когда придется брать точку только с 1 соседом черным
(если ненашлось других) ББ ББ БББББ БББББ (29) Чего-то непонял, ты о чем? Алгоритм придумал сейчас. Может какоя ошибка в рассуждениях? |
|||
|
33
Иде я
13.02.06
✎
16:48
|
Б Б
ББ Б такое учитывается? |
|||
|
34
igork1966
13.02.06
✎
16:51
|
(33) Договорились, что дефектов закраски нет.
|
|||
|
35
Торин
13.02.06
✎
16:51
|
(33) - нет. фигура плоская... это означает. что отрезок, соединяющий любые две точки на периметре полностью лежит во внутренней области... (каюсь, определение неточное.... )
|
|||
|
36
igork1966
13.02.06
✎
16:53
|
(35) Однако я бы посмотрел (31). Моя придумка может дать "неожиданный" сбой.
|
|||
|
37
Торин
13.02.06
✎
16:56
|
Обязательно поищу...
а изложить ваш алгоритм подробнее можно? Если не здесь, то мне на почту: torin99@yandex.ru |
|||
|
38
Diter
13.02.06
✎
16:56
|
Хм... а я делал такое на делфях лет 5 назад.... была интересная задачка по определению площади цветных пятен и вычислению их площади.....
пошёл через предварительную калибровку и подсчёт точек в пятне. Т.е. вначале подсовывал программе фигуру (квадрат) с точно известной площадью. Программа расчитывала площадь одного пикселя ну а дальше.... для чистоты проходил фигуру дважды. Вначале по горизонтале с верху вниз, а потом по вертикале с права на лево. результат суммировал и делил на два |
|||
|
39
Торин
13.02.06
✎
16:57
|
а диаметр?
|
|||
|
40
Diter
13.02.06
✎
16:59
|
(+38) а по поводу периметра - задача найти граничные точки. можно решить с помощью такого алгоритма - юзер тыкает мышкой в картинку вне фигуры и программа получает цвет (можно и наоборот - получать цвет пятна и идти от противного). А дальше - перебираются все пиксели с права на лево (до получения граничных) и сверху в низ. Правда - при этом возможен вариант с "дыркой" в середине фигуры.... Короче - нужно думать....
|
|||
|
41
igork1966
13.02.06
✎
16:59
|
(37) Дык я его придумал буквально "на коленях". Все изложено в (25,32).
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |