%%
%
% 장애물의 boundary 점들이 있을 때, 임의의 점이 해당 장애물 + margin을 준 것에 속한지 여부를
% 알애내는 것이 목적이다.
%
clc; clear; close all;
%% 1. 점과 선분 사이의 거리
A = [4 1];
B = [2 9];
axis_val = [-10 15 -10 15];
figure(1);
while 1
clf; hold on;
plot([A(1) B(1)], [A(2) B(2)], 'bo-', 'LineWidth', 2, 'MarkerSize', 15);
text(A(1), A(2), ' A', 'FontSize', 15);
text(B(1), B(2), ' B', 'FontSize', 15);
axis(axis_val); grid on;
pos = ginput(1);
dist = get_dist_point_line(A, B, pos);
plot(pos(1), pos(2), 'kx', 'LineWidth', 2, 'MarkerSize', 15);
axis(axis_val); grid on;
title(sprintf('Dist: %.1f', dist), 'FontSize', 15);
drawnow;
pause();
end
%% 2. 점과 다각형 사이의 거리 (내부에 있으면 -1)
poly = [4 1 ; 2 9 ; -5 10; -5 5; -3 5; -1 1; 4 1];
axis_val = get_axis_with_margin(poly, 3);
figure(2);
while 1
clf; hold on;
plot(poly(:, 1), poly(:, 2), 'bo-', 'LineWidth', 2, 'MarkerSize', 15);
axis(axis_val); grid on;
pos = ginput(1);
dist = get_dist_point_poly(poly, pos);
plot(poly(:, 1), poly(:, 2), 'bo-', 'LineWidth', 2, 'MarkerSize', 15);
plot(pos(1), pos(2), 'kx', 'LineWidth', 2, 'MarkerSize', 15);
axis(axis_val); grid on;
title(sprintf('Dist: %.1f', dist), 'FontSize', 15);
drawnow;
pause();
end
%% 3. 다각형에 마진을 준 결과
poly = [10 1 ; 2 9 ; -5 10; -5 5; -3 5; -1 1; 10 1];
axis_val = get_axis_with_margin(poly, 3);
margin = 2;
stage_struct = init_stage(axis_val(1), axis_val(2), axis_val(3), axis_val(4));
inout_grid = zeros(stage_struct.yres, stage_struct.xres);
for yi = 1:stage_struct.yres
for xi = 1:stage_struct.xres
curr_pos = [stage_struct.xgrid(xi) stage_struct.ygrid(yi)];
if get_dist_point_poly(poly, curr_pos) < margin
val = 0;
else
val = 1;
end
inout_grid(yi, xi) = val;
end
end
figure(3);
hold on; colormap summer;
pcolor(stage_struct.xgrid, stage_struct.ygrid, inout_grid); shading interp; lighting phong;
for i = 1:stage_struct.nr_points
curr_pos = stage_struct.points(i, :);
if get_dist_point_poly(poly, curr_pos) < margin
c = 'r';
else
c = 'b';
end
plot(curr_pos(1), curr_pos(2), 'x', 'Color', c);
end
plot(poly(:, 1), poly(:, 2), 'bo-', 'LineWidth', 2, 'MarkerSize', 15);
axis(axis_val);
grid on;