function [dh, dv] = wallDistance(corners, x, y) % Calculates the distances from the walls. % - Negative value means colision % - Inf value means no wall in this direction % % Inputs: % corners[] : corner matrix (each line is a corner point) % x: Car's x position % y: Car's y position % Outputs: % dh: Horizontal distance from wall % dv: Vertical distance from wall % Calculate the distances in the x direction srt_corners = sortrows(corners, 2); active_corners = -Inf(size(corners)); for i=1:length(srt_corners) if srt_corners(i, 2) >= y active_corners = srt_corners(i:end, :); break; end end dx = active_corners(:, 1) - x; % Walls are on the right dh = min(dx); % Minimum distance in x direction % Calculate the distances in the y direction srt_corners = sortrows(corners, 1, 'descend'); active_corners = -Inf(size(corners)); for i=1:length(srt_corners) if srt_corners(i, 1) <= x active_corners = srt_corners(i:end, :); break; end end dy = y - active_corners(:, 2); % Walls are on the bottom dv = min(dy); % Minimum distance in y direction if ~isfinite(dh) dh = Inf; end if ~isfinite(dv) dv = Inf; end end