Spaces:
Runtime error
Runtime error
function [constraint, box, updated] = align_with_boundary(box, boundary, threshold, rType) | |
tempBox = box; | |
updated = false(size(box)); | |
closedSeg = zeros(size(box)); | |
distSeg = zeros(size(box)); | |
for i = 1:length(box) | |
[closedSeg(i,:), distSeg(i,:)] = find_close_seg(box(i,:), boundary); | |
end | |
box(distSeg <= threshold) = closedSeg(distSeg <= threshold); | |
updated(distSeg <= threshold) = true; | |
idx = find(distSeg <= threshold); | |
constraint = [idx closedSeg(idx)]; | |
% check if any room box blocks the door | |
entranceBox = get_entrance_space(boundary(1:2, 1:2), boundary(1,3), threshold); | |
entrancePoly = polyshape(entranceBox([1 1 3 3]), entranceBox([2 4 4 2])); | |
for i = 1:length(box) | |
if rType(i) ~= 10 && rType(i) ~= 0 | |
roomPoly = polyshape(box(i, [1 1 3 3]), box(i, [2 4 4 2])); | |
if overlaps(entrancePoly, roomPoly) | |
box(i,:) = shrink_box(roomPoly, entrancePoly, boundary(1,3)); | |
updated(i, box(i,:)==tempBox(i,:)) = false; | |
updated(i, box(i,:)~=tempBox(i,:)) = true; | |
end | |
end | |
end | |