Я работаю со списком прямоугольников и должен проверить, находится ли каждый из них в правильном положении на основе фиксированной шаблона и набора геометрических ограничений. 4-role pattern based on their index:
0 → Top Left
1 → Bottom Left
2 → Top Right
3 → Bottom Right
4 → Top Left
5 → Bottom Left
6 → Top Right
7 → Внизу справа
...
Каждая группа состоит из 4 прямоугольников с последовательными показателями, начиная с кратных 4 (то есть, индексы 0–3, 4–7, 8–11 и т. Д.).
Роли, назначенные индексом % 4, повторяйте в каждой группе. Несмотря на то, что сама роль определяется исключительно по индексу, фактическая позиция прямоугольника, как ожидается, будет визуально соответствовать этой роли (например, прямоугольный прямолинейный взгляд на верхнюю левую в своей группе). < /P>
Последняя группа может содержать менее 4 прямоугольников, если длина списка не делится на 4. Это не рассматривается по ошибке, пока все еще не будет осмотрительно. Это исключение относится только к окончательной группе на основе длины списка ввода. < /P>
шаблон повторяется каждые 4 элемента. Однако прямоугольники в сборе ввода уже могут быть неправильно расположены. Верхний левый прямоугольник помещается там, где должен быть прямоугольный прямоугольник). < /P>
Допустимый диапазон движения каждого прямоугольника определяется не только путем предотвращения прямого перекрытия с соседями, но также и дополнительным правилом:
не должно пересекать линии расширенной оси (x-ax-ax ax ax ax ax. < /P>
horizontal mails): < /p>
horizontal mails). Горизонтально, пока он не пересекает вертикальные граничные линии своих горизонтальных соседей: < /p>
Слева: она не должна пересекать вертикальную линию, простирающуюся от правого края левого соседа. < /p>
Право: не должна пересекать версическую линию, выходящую от левого края правого соседа. (Ось Y):
прямоугольник может двигаться вертикально только до тех пор, пока он не пересекает горизонтальные граничные линии своей вертикальной пары (верхняя /нижняя пара): < /p>
Движение вниз: она не должна пересекать горизонтальную линию, расширяющуюся от верхней части нижней пары. его верхняя пара. < /p>
Другими словами, прямоугольник никогда не должен пересекать воображаемые границы, выравниваемые осью, даже если сами прямоугольники не касаются физически. Ограничение: не может пересечь горизонтальную ось, простирающуюся от края пары.
прямоугольники могут варьироваться по размеру, они не обязаны быть равномерными. Это учитывается в логике: все валидация положения основана на краях и ограничениях, выравниваемых осью (не фиксированными измерениями). Прямоугольник считается недействительным, только если он пересекает расширенные граничные линии соседа, независимо от его размера. < /P>
Я пишу приведенный ниже код. В настоящее время моя функция идентифицирует, когда два прямоугольника нарушают ограничение оси (например, один перекрывает другой вдоль x или y). Но в таких случаях он помечает оба прямоугольника - тот, который остался в правильном положении, и тот, который фактически перемещался в пространство другого. < /P>
Однако это поведение не идеально. Я хотел бы лишь пометить прямоугольник, который вторгся в зону оси другого. Логика, с приведенным ниже примером ввода только следующие индексы должны быть помечены недействительными: 1, 2, 6, 14, 15, 11 < /p>
Причины: < /p>
Индекс 2 скрещивает влево по осью правой края его левого соседа (то есть он нарушает правую границу со стороны левого соседа). Позиции не соответствуют ожидаемым ролям рисунка (например, «верхний левый», где должен быть «нижний правый», и наоборот). Порядок. < /p>
std::vector testRectangles = {
{ 0, 80, 275, 130, 150 },
{ 1, 1380, 275, 130, 150 },
{ 2, 100, 55, 130, 150 },
{ 3, 250, 720, 130, 150 },
{ 4, 460, 275, 130, 150 },
{ 5, 460, 720, 130, 150 },
{ 6, 740, 475, 130, 150 },
{ 7, 640, 720, 130, 150 },
{ 8, 830, 275, 130, 150 },
{ 9, 830, 720, 130, 150 },
{ 10, 1000, 275, 130, 150 },
{ 11, 1380, 720, 130, 150 },
{ 12, 1220, 275, 130, 150 },
{ 13, 1220, 720, 130, 150 },
{ 14, 80, 720, 130, 150 },
{ 15, 1000, 720, 130, 150 },
{ 16, 1580, 275, 130, 150 },
{ 17, 1580, 720, 130, 150 },
{ 18, 1730, 275, 130, 150 }
};
< /code>
Визуально с неверными прямыми:
Как я могу улучшить логику, чтобы отметить только то, что прямое, что например, что -то, если это то, что правильно, - это то, что правильно, - это то, что правильно, - это то, что правильно, - это то, что правильно, - это то, что правильно, и то, что она нарушает? B пересекается в область A, только B должен быть помечен, а не оба. макет - а затем только отмечает неправильный? Благодарность.
Подробнее здесь: https://stackoverflow.com/questions/796 ... axis-based
Как проверить положения прямоугольника в повторяющейся 4-ролльной компоновке с пространственными ограничениями на основе ⇐ C++
Программы на C++. Форум разработчиков
1749326221
Anonymous
Я работаю со списком прямоугольников и должен проверить, находится ли каждый из них в правильном положении на основе фиксированной шаблона и набора геометрических ограничений. 4-role pattern based on their index:
0 → Top Left
1 → Bottom Left
2 → Top Right
3 → Bottom Right
4 → Top Left
5 → Bottom Left
6 → Top Right
7 → Внизу справа
...
Каждая группа состоит из 4 прямоугольников с последовательными показателями, начиная с кратных 4 (то есть, индексы 0–3, 4–7, 8–11 и т. Д.).
Роли, назначенные индексом % 4, повторяйте в каждой группе. Несмотря на то, что сама роль определяется исключительно по индексу, фактическая позиция прямоугольника, как ожидается, будет визуально соответствовать этой роли (например, прямоугольный прямолинейный взгляд на верхнюю левую в своей группе). < /P>
Последняя группа может содержать менее 4 прямоугольников, если длина списка не делится на 4. Это не рассматривается по ошибке, пока все еще не будет осмотрительно. Это исключение относится только к окончательной группе на основе длины списка ввода. < /P>
шаблон повторяется каждые 4 элемента. Однако прямоугольники в сборе ввода уже могут быть неправильно расположены. Верхний левый прямоугольник помещается там, где должен быть прямоугольный прямоугольник). < /P>
Допустимый диапазон движения каждого прямоугольника определяется не только путем предотвращения прямого перекрытия с соседями, но также и дополнительным правилом:
не должно пересекать линии расширенной оси (x-ax-ax ax ax ax ax. < /P>
horizontal mails): < /p>
horizontal mails). Горизонтально, пока он не пересекает вертикальные граничные линии своих горизонтальных соседей: < /p>
Слева: она не должна пересекать вертикальную линию, простирающуюся от правого края левого соседа. < /p>
Право: не должна пересекать версическую линию, выходящую от левого края правого соседа. (Ось Y):
прямоугольник может двигаться вертикально только до тех пор, пока он не пересекает горизонтальные граничные линии своей вертикальной пары (верхняя /нижняя пара): < /p>
Движение вниз: она не должна пересекать горизонтальную линию, расширяющуюся от верхней части нижней пары. его верхняя пара. < /p>
Другими словами, прямоугольник никогда не должен пересекать воображаемые границы, выравниваемые осью, даже если сами прямоугольники не касаются физически. Ограничение: не может пересечь горизонтальную ось, простирающуюся от края пары.
прямоугольники могут варьироваться по размеру, они не обязаны быть равномерными. Это учитывается в логике: все валидация положения основана на краях и ограничениях, выравниваемых осью (не фиксированными измерениями). Прямоугольник считается недействительным, только если он пересекает расширенные граничные линии соседа, независимо от его размера. < /P>
Я пишу приведенный ниже код. В настоящее время моя функция идентифицирует, когда два прямоугольника нарушают ограничение оси (например, один перекрывает другой вдоль x или y). Но в таких случаях он помечает оба прямоугольника - тот, который остался в правильном положении, и тот, который фактически перемещался в пространство другого. < /P>
Однако это поведение не идеально. Я хотел бы лишь пометить прямоугольник, который вторгся в зону оси другого. Логика, с приведенным ниже примером ввода только следующие индексы должны быть помечены недействительными: 1, 2, 6, 14, 15, 11 < /p>
Причины: < /p>
Индекс 2 скрещивает влево по осью правой края его левого соседа (то есть он нарушает правую границу со стороны левого соседа). Позиции не соответствуют ожидаемым ролям рисунка (например, «верхний левый», где должен быть «нижний правый», и наоборот). Порядок. < /p>
std::vector testRectangles = {
{ 0, 80, 275, 130, 150 },
{ 1, 1380, 275, 130, 150 },
{ 2, 100, 55, 130, 150 },
{ 3, 250, 720, 130, 150 },
{ 4, 460, 275, 130, 150 },
{ 5, 460, 720, 130, 150 },
{ 6, 740, 475, 130, 150 },
{ 7, 640, 720, 130, 150 },
{ 8, 830, 275, 130, 150 },
{ 9, 830, 720, 130, 150 },
{ 10, 1000, 275, 130, 150 },
{ 11, 1380, 720, 130, 150 },
{ 12, 1220, 275, 130, 150 },
{ 13, 1220, 720, 130, 150 },
{ 14, 80, 720, 130, 150 },
{ 15, 1000, 720, 130, 150 },
{ 16, 1580, 275, 130, 150 },
{ 17, 1580, 720, 130, 150 },
{ 18, 1730, 275, 130, 150 }
};
< /code>
Визуально с неверными прямыми:
Как я могу улучшить логику, чтобы отметить только то, что прямое, что например, что -то, если это то, что правильно, - это то, что правильно, - это то, что правильно, - это то, что правильно, - это то, что правильно, - это то, что правильно, и то, что она нарушает? B пересекается в область A, только B должен быть помечен, а не оба. макет - а затем только отмечает неправильный? Благодарность.
Подробнее здесь: [url]https://stackoverflow.com/questions/79655259/how-to-validate-rectangle-positions-in-a-repeated-4-role-layout-with-axis-based[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия