Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точки касания окружности 
V
    Опции темы
gendalf7771
Дата 24.5.2014, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 19.7.2012
Где: Архангельск

Репутация: нет
Всего: нет



Доброго времени суток!

Имеется окружность (строю по Брезенхему) и много всяких кривых линий. Требуется на построенной окружности найти точки, в которых линии касаются её, но не пересекают.
PM MAIL   Вверх
_Y_
Дата 24.5.2014, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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 (на правах саморекламы:)
PM MAIL WWW   Вверх
gendalf7771
Дата 25.5.2014, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 19.7.2012
Где: Архангельск

Репутация: нет
Всего: нет



Спасибо за ответ, помогли)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0953 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.