![]() |
|
![]() ![]() ![]() |
|
gendalf7771 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 19.7.2012 Где: Архангельск Репутация: нет Всего: нет |
Доброго времени суток!
Имеется окружность (строю по Брезенхему) и много всяких кривых линий. Требуется на построенной окружности найти точки, в которых линии касаются её, но не пересекают. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Как понимаю, формул кривых у Вас нет, только их растровые изображения. А данные для построения окружности есть (иначе какая разница каким алгоритмом строили?).
Я бы сделал так. 1. Растр с кривыми бинаризуется (если он уже не бинаризован): скажем, точкам, принадлежащим кривым присваиваем единицы, без кривых нули. Бинаризованный растр храним, скажем, в Integer формате. 2. Рисуем окружность по Брезенхему, при этом пикселям 0 присваиваем значение 2, а пикселям 1 - значение 3; т.е проводим окружность не присваивая какое-то значение, а прибавляя к имеющемуся +2. 3. Проходим по регионам, заполненным 3-ками, обходя каждый по периметру и считая сколько раз значение соседних пикселей изменилось с любого значения на 1. Если имеем дело с касательной, то изменение будет тлько одно. При пересечении - два. И еще: i) Сложность возникнет для случая прохождения окружности через точку касания двух кривых. Но, в этом случае не так легко и разобраться пересекаются кривые или только касаются. Но, если такие случаи критичны, можно тот же алгоритм применять не один раз, а несколько - каждый раз бинаризуя исходный растр так, чтобы оставаласть только одна кривая; т.е работать с каждоой кривой по отдельности. ii) Все это будет работать если и кривые и окружность имеют толщину не в один пиксель. Если же они однопиксельные, сначала нужно их "утолстить". Будет некоторая потеря точности, но с ней можно будет побороться последующими проверками. Это сообщение отредактировал(а) _Y_ - 24.5.2014, 09:04 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
gendalf7771 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 19.7.2012 Где: Архангельск Репутация: нет Всего: нет |
Спасибо за ответ, помогли)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |