Ищу алгоритм разбивки изображения на графические примитивы(экспозиции)

Тема в разделе "WASM.A&O", создана пользователем God_Father, 30 июн 2010.

  1. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Дана произвольная фигура с замкнутым контуром.Требуется "заполнить" фигуру графическими примитивами (прямоугольниками минимальный размер стороны и максимальный размер стороны которых известны).Примитивы можно вращать, дискретность вращения - 1 градус.
    Цель сводится к максимальной аппроксимации этой фигуры графическими примитивами при заданной величине погрешности. Т.е. аппроксимация с заданной величиной погрешности.
     
  2. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Файл с картинкой прилагаю
     
  3. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    God_Father
    Опишите контур фигуры. Матчасть я сдесь вылаживал подробную. Использовал для выделения образов и быстрой заливки фигур. Добавлю что есчо во времена спектрума юзал для заливки.
     
  5. Ravager

    Ravager New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Судя по картинке, прямоугольники могут пересекаться. Тогда можно просто задать начальное разбиение какой-нибудь прямоугольной сеткой, потом пройтись по границе фигуры, расставляя прямоугольники вдоль неё, где потребуется.
     
  6. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Clerk
    допустим фигуру разбил на полигон, который аппроксимирует её с заданной точностью. (стороны аппроксимировал отрезками заданной длины), дальше что?

    Ravager
    а как потом обнаруживать пустые места, где нет прямоугольников?
     
  7. Ravager

    Ravager New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    34
    Надо взять точки пересечения линий сетки с контуром фигуры, участок между двумя такими соседними точками аппроксимировать отрезком или ломаной, эти отрезки и будут основаниями добавочных прямоугольников.
     
  8. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Хорошо, а вот у меня полигоном из N точек аппроксиморован бублик с дыркой.
    Как мне узнать, куда строить добавочный прямоугольник, наружу или внутрь.
    Тоесть мне нужен алгоритм, который определит находится ли точка на бублике или в другом месте (дырка или снаружи). Естественно бублик со швом, который связывает его внутренний контур с наружным.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    God_Father
    Это направление описания контура определяет.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    God_Father
    Зачем вам прямоугольники? Жесть.
     
  11. God_Father

    God_Father New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    99
    Это как я понял алгоритм трассировки луча нужен, чтоб определить находится ли точка в бублике или нет.
    Теперь про построение, а если угол между 3-мя точками острый, то тут как?
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    По-моему задача сводится к нахождению OBB(oriented bounding box). Только поиск не описанных боксов, а вписанных. Находим первый вписанный бокс(по алгоритмам схожими с описанными), получаем множество фигур которые нужно разбивать далее, и продолжаем разбивать. Также у нас есть некий люфт(наложение), который позволяет улучшать алгоритм. Но вообще алгоритмы нахождения OBB, не слишком быстры и порой требуют квадратичной сложности.
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Также желательно сначала разбить фигуру на конвексы(выпуклые фигуры).