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 | |