Извините за запутанное название, я действительно не мог придумать ничего лучшего.Разрешение только прямоугольного выделения с сеткой флажков
Скажите, что мой клиент имеет квадратное пространство на своей домашней странице, где они могут загружать изображения, которые могут быть размещены на любом количестве ящиков в сетке.
Выбор коробок изображение должно занимать выглядит примерно так:
<div class="row">
<div class="grid-position">
<input type="checkbox" name="position[1]" disabled>
</div>
<div class="grid-position">
<input type="checkbox" name="position[2]" disabled>
</div>
<div class="grid-position">
<input type="checkbox" name="position[3]">
</div>
<div class="grid-position">
<input type="checkbox" name="position[4]">
</div>
</div>
<div class="row">
<div class="grid-position">
<input type="checkbox" name="position[5]">
</div>
<div class="grid-position">
<input type="checkbox" name="position[6]">
</div>
<div class="grid-position">
<input type="checkbox" name="position[7]">
</div>
<div class="grid-position">
<input type="checkbox" name="position[8]">
</div>
</div>
https://jsfiddle.net/17zt26wb/4/
Однако, как изображения могут быть только прямоугольной формы, я хочу, чтобы предотвратить их выбор что-то вроде этого:
Х - Х - О - О
Х - О - О - О
var selection = {p1: true, p2: true, p3: false, p4: false, p5: true, p6: false, p7: false, p8: false};
ИЛИ:
О - О - X - X
Х - О - О - О
var selection = {p1: false, p2: false, p3: true, p4: true, p5: true, p6: false, p7: false, p8: false};
Однако это справедливо:
X - O - O - O
О - О - О - О
var selection = {p1: true, p2: false, p3: false, p4: false, p5: false, p6: false, p7: false, p8: false};
ИЛИ:
О - Х - Х - Х
О - Х - Х - Х
var selection = {p1: false, p2: true, p3: true, p4: true, p5: false, p6: true, p7: true, p8: true};
и т.д.
Мне нужна помощь в вычислении и алгоритме, который вернет true/false, если выбранные флажки представляют квадрат/прямоугольник. Это можно сделать в Javascript, но это не имеет значения - мне просто нужно что-то начать, я сам пошлю его на свой язык.
В скрипке первые два флажка отключены, поскольку изображение уже занимает эти два блока. Значения p1 и p2 в объекте всегда являются ложными.
Возможно ли это? Я могу просто не заботиться о проверке, но было бы неплохо иметь.
Редактировать: Чтобы уточнить, размер сетки должен всегда оставаться как 4x2, однако было бы неплохо иметь возможность изменять размер с помощью констант.
Я считаю .... 28 ... допустимые комбинации. Это достаточно маленький домен, который вы можете просто жестко кодировать действительные комбинации. Если ваша сетка была 30x30 (например), это не было бы допустимым вариантом, и вам понадобится алгоритм. Но для этого небольшого идентификатора домена просто сдайте и переустановите действительные. – Jamiec
Я думал об этом. Технически размер сетки всегда будет 4x2, но в будущем это невозможно. В худшем случае, если у кого-то нет лучшей идеи, я, скорее всего, просто переустановил его. – marekpw
Есть разумные способы «жесткого кода», чтобы вы могли легко добавлять правила в будущем - работая над ответом для вас – Jamiec