32 lines
1001 B
Matlab
32 lines
1001 B
Matlab
function d = distance(obj, pos)
|
|
arguments (Input)
|
|
obj (1, 1) {mustBeA(obj, 'rectangularPrism')};
|
|
pos (:, 3) double;
|
|
end
|
|
arguments (Output)
|
|
d (:, 1) double
|
|
end
|
|
if obj.contains(pos)
|
|
% Queried point is inside geometry
|
|
% find minimum distance to any face
|
|
d = min([pos(1) - obj.minCorner(1), ...
|
|
pos(2) - obj.minCorner(2), ...
|
|
pos(3) - obj.minCorner(3), ...
|
|
obj.maxCorner(1) - pos(1), ...
|
|
obj.maxCorner(2) - pos(2), ...
|
|
obj.maxCorner(3) - pos(3)]);
|
|
else
|
|
% Queried point is outside geometry
|
|
cPos = NaN(1, 3);
|
|
for ii = 1:3
|
|
if pos(ii) < obj.minCorner(ii)
|
|
cPos(ii) = obj.minCorner(ii);
|
|
elseif pos(ii) > obj.maxCorner(ii)
|
|
cPos(ii) = obj.maxCorner(ii);
|
|
else
|
|
cPos(ii) = pos(ii);
|
|
end
|
|
end
|
|
d = norm(cPos - pos);
|
|
end
|
|
end |