Как проверить положения прямоугольника в повторяющейся 4-ролльной компоновке с пространственными ограничениями на основеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как проверить положения прямоугольника в повторяющейся 4-ролльной компоновке с пространственными ограничениями на основе

Сообщение Anonymous »

Я работаю со списком прямоугольников и должен проверить, находится ли каждый из них в правильном положении, основанном на фиксированной шаблоне и наборе геометрических ограничений. Пространственная позиция, повторяя каждые 4 элемента в списке. Несмотря на то, что сама роль определяется исключительно по индексу, фактическая позиция прямоугольника, как ожидается, визуально соответствует этой роли < /p>
Последняя группа может содержать менее 4 прямоугольников, если длина списка не делится на 4. Это не считается ошибкой - как оставшиеся прямоугольники в этой последней группе по -прежнему следуют ожидаемой ролевой и пространственной правилам. Это исключение применимо только к окончательной группе, основанной на длине списка ввода. размещение там, где должен быть правый прямоугольник). < /p>
Допустимый диапазон движения каждого прямоугольника определяется не только путем предотвращения прямого перекрытия с его соседями, но также и дополнительным правилом:
прямоугольники не должны пересекать линии удлиненной оси (x-axis). До тех пор, пока он не пересекает вертикальные граничные линии своих горизонтальных соседей: < /p>
слева: она не должна пересекать вертикальную линию, простирающуюся от правого края левого соседа. < /p>
Право: не должна пересекать вертикальную линию, простирающуюся от левого края правого соседа. (Ось Y):
прямоугольник может двигаться вертикально только до тех пор, пока он не пересекает горизонтальные граничные линии своей вертикальной пары (верхняя /нижняя пара): < /p>
Движение вниз: она не должна пересекать горизонтальную линию, расширяющуюся от верхней части нижней пары. его верхняя пара. < /p>
Другими словами, прямоугольник никогда не должен пересекать воображаемые границы, выравниваемые осью, даже если сами прямоугольники не касаются физически. Ограничение: не может пересечь горизонтальную ось, простирающуюся от края пары.
прямоугольники могут варьироваться по размеру, они не обязаны быть равномерными. Это учитывается в логике: все валидация положения основана на краях и ограничениях, выравниваемых осью (не фиксированными измерениями). Прямоугольник считается недействительным, только если он пересекает расширенные граничные линии соседа, независимо от его размера. < /P>
Я пишу приведенный ниже код. В настоящее время моя функция идентифицирует, когда два прямоугольника нарушают ограничение оси (например, один перекрывает другой вдоль x или y). Но в таких случаях он помечает оба прямоугольника - тот, который остался в правильном положении, и тот, который фактически перемещался в пространство другого. < /P>
Однако это поведение не идеально. Я хотел бы просто пометить прямоугольник, который вторгся в зону оси другого. Индекс того, который фактически нарушил правило, пересекая запрещенное пространство.

Подробнее здесь: https://stackoverflow.com/questions/796 ... axis-based
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»