10 ярусов по 8 ячеек и в каждой ячейке по 15 мест:
сделать с помощью деления, то есть с помощью div и mod
function getRects(dots,padding = 30){ //dots - Array[{x:x,y:y} ]
if(dots.length == 1)
dots = dots.concat([dots[0]]);
let rects = [];
if(dots.length > 1){
for(let i = 0; i < dots.length-1;i++){
let angle = getAngle(dots[i].x,dots[i].y,dots[i+1].x,dots[i+1].y);
rects.push({
x1:dots[i].x + padding * Math.cos(angle-Math.PI/2) + padding * Math.cos(angle+Math.PI),
y1:dots[i].y + padding * Math.sin(angle-Math.PI/2) + padding * Math.sin(angle+Math.PI),
x2:dots[i].x + padding * Math.cos(angle+Math.PI/2) + padding * Math.cos(angle+Math.PI),
y2:dots[i].y + padding * Math.sin(angle+Math.PI/2) + padding * Math.sin(angle+Math.PI),
x3:dots[i+1].x + padding * Math.cos(angle+Math.PI/2) + padding * Math.cos(angle),
y3:dots[i+1].y + padding * Math.sin(angle+Math.PI/2) + padding * Math.sin(angle),
x4:dots[i+1].x + padding * Math.cos(angle-Math.PI/2) + padding * Math.cos(angle),
y4:dots[i+1].y + padding * Math.sin(angle-Math.PI/2) + padding * Math.sin(angle),
});
}
}
return rects;
}
//Получить угол между двумя точками
function getAngle(dx, dy, dx1, dy1) {
return Math.atan2(dy - dy1, dx - dx1) + Math.PI;
}
function flags($value) {
if (!in_array($value, [0, 1, 2, 3, 6, 7, 8, 9])) {
return false;
}
$result = [];
if (in_array($value, [1, 3, 7, 9])) {
$result[] = 'a';
}
if (in_array($value, [2, 3, 8, 9])) {
$result[] = 'b';
}
if (in_array($value, [6, 7, 8, 9])) {
$result[] = 'c';
}
return $result;
}
START TRANSACTION;
INSERT ...
INSERT ...
...
COMMIT;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;