![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как вписать прямоугольник между прямоугольниками
Вова © (2013-08-10 14:24:00)http://s57.radikal.ru/i157/1308/e8/e884547d4fa4.png
координаты черных прямоугольников я знаю. Координаты красного я хочу узнать. Причем алгоритм автоматом должен понимать, что красный должен быть именно справа, а не слева, от трех других (т.е. я хочу найти объект между тремя другими). Ну также внутри большого, но это впринципе понятно. Теоретически хотелось бы, чтобы вписывание делалось автоматом для любого количества объектов, от трех. ну ладно хотя бы для трех ) Я вообще хз как к этому подступиться.
ProgRAMmer Dimonych (2013-08-13 01:09:00) [1]> На данный момент переводя на пример с картинами и табличками,
> у меня есть картина, под ней табличка, а гораздо ниже картины,
> есть еще одна табличка, которая мне нафиг не нужна, но
> которая как 2 капли воды похожа на нужную. И никакие объекты
> по прямой эти таблички не разделяют.
«Всё чудесатее и чудесатее».
Очень Злой (2013-08-13 00:02:00) [2]а если стоит задача нахождения прямоугольника наибольшей площади (или нескольких вариантов с наибольшими площадями), то это уже элементарно делается хотя бы с помощью рекурсии.
Очень злой (2013-08-12 22:10:00) [3]
> и задача упрощается...
потому как у нас остается на 1 прямоугольник меньше.
Очень злой (2013-08-12 22:09:00) [4]а если прямоугольник должен быть именно справа, то отсекаем все что находится левее самой левой из правых сторон внутренних прямоугольников и задача упрощается...
Очень злой (2013-08-12 22:06:00) [5]
> Причем алгоритм автоматом должен понимать, что красный должен
> быть именно справа, а не слева, от трех других
В случае с приведенной картинкой - это нижняя сторона верхнего прямоугольника, верхняя - нижнего, правая сторона левого и правая сторона большого.
Но если прямоугольники могут располагаться как-то по другому то условие нужно пересмотреть и отказаться от использования таких изречений, как:
быть именно справа, а не слева, от трех других
Вова (2013-08-12 15:13:00) [6]
> И, кстати, а почему не найти все картины и таблички, а потом
> сопоставлять их?
потому что скорость критична и будет слишком жирно искать все картины и таблички сразу ). Как я уже сказал, хотел просто что то универсальное сделать, чтобы забыть об этой задаче навсегда. На данный момент переводя на пример с картинами и табличками, у меня есть картина, под ней табличка, а гораздо ниже картины, есть еще одна табличка, которая мне нафиг не нужна, но которая как 2 капли воды похожа на нужную. И никакие объекты по прямой эти таблички не разделяют. Впрочем с этим я тоже справлюсь. но это не универсально и в будущем опять придется лепить новый велосипед )
Вова (2013-08-12 15:06:00) [7]Наверное более решаемо тогда будет искать не самый большой, а самый маленький прямоугольник. Т.е. продлить стороны всех маленьких черных прямоугольников, до сторон прямоугольника "Владельца", и вот там где они пересекутся, самый маленький результирующий прямоугольник и есть решение. Как то так наверное.
Sha (2013-08-12 15:04:00) [8]И в чем проблема?
Задай дельта-окрестность картины,
исключи из нее другие картины
и ищи там свою табличку.
ProgRAMmer Dimonych (2013-08-12 15:03:00) [9]> Функция поиска объекта уже есть и не рассматривается. Остается
> задача выявить область поиска
There must be some larger problem they are trying to solve, and they managed to break it down into two parts, the easy part and the impossible part, and they wanted help with the impossible part.
По теме — что-то похожее (если я правильно телепатирую большую задачу) в универе когда-то писали с помощью синтаксических методов распознавания.
Положение таблички как-то регламентируется ведь? Например, «находится ниже картины и хотя бы частично пересекается с картиной в проекции на горизонтальную ось». Хотя в такой формулировке тоже не очень-то решаемо.
И, кстати, а почему не найти все картины и таблички, а потом сопоставлять их?
Вова (2013-08-12 14:53:00) [10]что значит на "Верхнем" уровне? я итак уже рассказал вроде.
Несколько экземпляров объекта, каждый из них может в каждый момент времени присутствовать или отсутствовать. А мне нужно проверить, так присутствует нужный мне экземпляр или отсутствует в текущий момент времени). Функция поиска объекта уже есть и не рассматривается. Остается задача выявить область поиска, экземпляры идентичны, а следовательно понять какой мы ищем можно только по окружению.
Частный случай - который видимо таки я и буду юзать - искомый объект находится под черным квадратом. (ну то есть под уже идентифицированным объектом, местоположение которого известно), либо слева, либо справа и т.д. Т.е. например, висит на стене картина, а под ней табличка, я идентифицировал картину, нужно найти табличку, но табличку не от соседней картины, которая висит рядом, а именно от этой. Тут возникает проблема, что если под нужной картиной висит еще одна картина, а под ней такая же табличка? т.е. область поиска нужно ограничить еще, а не искать от картины вниз до конца стены. И т.д. И в общем идея была в том, чтобы передать координаты идентифицированных картин и функция должна ограничить область поиска положением этих картин автоматом. И у меня нет никакого настроения каждый раз писать, что искать табличку нужно на 10 сантиметров ниже картины и т.п. Т.к. это расстояние придется во первых измерять, а во вторых оно не всегда одинаковое, поэтому все должно быть относительно.
Альтернативу прямоугольникам могут составить разве что круги. Просто в прямоугольник вписан объект и все.
Sha (2013-08-12 14:24:00) [11]Давай вернемся к [10].
Сформулируй исходную задачу. И мы продолжим решать ее вместе:
ты - своими прямоугольниками, а мы - своими.
ProgRAMmer Dimonych (2013-08-12 14:21:00) [12]Я бы всё же рекомендовал рассказать, какая задача решается «на верхнем уровне». Может быть, прямоугольники окажутся и вовсе неудачной абстракцией. Ну или по крайней мере станет понятно вот это:
> т.е. я мог бы искать например третий объект, но дело в том, что не факт, что первые 2 в данный момент вообще существуют
и вот это:
> их положение привязано друг к другу, т.е. если сдвинуть черный квадрат, то и сдвинется искомый объект
Sha (2013-08-12 14:21:00) [13]задача становится все чудесатее,
длина касаний может быть большой, но площадь - маленькой
Вова (2013-08-12 14:21:00) [14]да в общем как его хотя бы построить, ну то есть все возможные
Вова (2013-08-12 14:19:00) [15]из возможных выбрать тот у кого длина "касаний" наибольшая?
Sha (2013-08-12 14:16:00) [16]и как оно должно это сообразить?
Вова (2013-08-12 14:16:00) [17]( блин, тогда условие однозначно нельзя задать (
Вова (2013-08-12 14:14:00) [18]ммм, в моем. )
Sha (2013-08-12 14:10:00) [19]На рисунке красный прямоугольник можно нарисовать так,
чтобы он касался верхнего края поля и трех черных квадратов.
Так где же прячется искомый объект?
В твоем красном прямоугольнике или в моем?
Вова (2013-08-12 14:01:00) [20]ну я же выше писал, я ищу объект. Ищу я их в прямоугольнике (в большом). Объектов в прямоугольнике много всяких разных. А есть такие которые присутствуют в нескольких экземплярах и для того чтобы искать именно нужный мне экземпляр (т.е. я мог бы искать например третий объект, но дело в том, что не факт, что первые 2 в данный момент вообще существуют), необходимо выделить область в котором он может находиться. Т.к. его там может и не быть вовсе. Причем я могу точно утверждать в каком месте по отношению к другим объектам будет искомый объект, т.к. их положение привязано друг к другу, т.е. если сдвинуть черный квадрат, то и сдвинется искомый объект. Прямоугольники используются потому что так проще, геометрия объекта не анализируется. Итого в частном случае можно чего то накалякать, но хочется изобрести алгоритм для общего случая, когда я передаю функции список объектов между которыми искать, а оно само решает в какой области это делать.