Finding Minimum Distance between two points

28 views (last 30 days)
Hi, I am trying to make a function to find minimum distance between my random points and a point (0,0) and plot the distance as a line crossing from the (0,0) to the one of the closest rand pt.
A=rand(2,10);
x1=A(1,:);
y1=A(2,:);
scatter(x1,y1);
[D I] = pdist2(x1,y1,'euclidean')
I have been trying to use 'pdist2' with 'euclidean' function however, it is not working well. :O
  1 Comment
KSSV
KSSV on 27 Oct 2016
Dear friend..there will be only fixed distance between two points. Think of your question once.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 27 Oct 2016
You don't need pdist2() because you aren't asking for the distance of every point to every other point. You're only asking for the distance from every point to the single point at (0, 0). So you can simply use sqrt()! Try this:
% Create 10 random points.
xy = rand(10, 2);
x = xy(:, 1);
y = xy(:, 2);
plot(x, y, 'bo', 'MarkerSize', 10);
grid on;
% Compute the distance of each of those points from (0, 0)
distances = sqrt(xy(: , 1) .^ 2 + xy(:, 2) .^ 2)
% Find the closest one.
[minDistance, indexOfMin] = min(distances);
closestX = x(indexOfMin);
closestY = y(indexOfMin);
% Mark it with red *
hold on; % Don't blow away existing points.
plot(closestX, closestY, 'r*', 'MarkerSize', 8, 'LineWidth', 2);
% Draw a line from the closest point to (0, 0)
line([0, closestX], [0, closestY], 'LineWidth', 2, 'Color', 'r');
  4 Comments
Image Analyst
Image Analyst on 7 Jul 2019
Paul, did you try it yourself using my directions above? I'm sure you did, and you probably got something like the code below:
% Program to make a set of random points and travel from (0,0) to
% the closest other remaining point.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
imtool close all; % Close all imtool figures if you have the Image Processing Toolbox.
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 14;
% Create 10 random points.
numPoints = 10;
xy = rand(numPoints, 2);
x = xy(:, 1);
y = xy(:, 2);
plot(x, y, 'bo', 'MarkerSize', 10);
grid on;
% First do it once to get the first point.
% Compute the distance of each of those points from (0, 0)
distances = sqrt(xy(: , 1) .^ 2 + xy(:, 2) .^ 2)
% Find the closest one.
[minDistance, indexOfMin] = min(distances);
closestX = x(indexOfMin);
closestY = y(indexOfMin);
% Mark it with red *
hold on; % Don't blow away existing points.
plot(closestX, closestY, 'r*', 'MarkerSize', 8, 'LineWidth', 2);
% Draw a line from the closest point to (0, 0)
line([0, closestX], [0, closestY], 'LineWidth', 2, 'Color', 'r');
% Now do it for the remaining points.
% Go from that point to the closest of the remaining other points.
alreadyUsed = false(1, numPoints);
counter = 2;
maxIterations = numPoints; % Failsafe
alreadyUsed(indexOfMin) = true; % Mark that point as having been used already.
while sum(alreadyUsed) <= (numPoints - 1) && (counter <= maxIterations)
% Compute the distance of each of those points from the last point.
lastx = x(indexOfMin(counter - 1));
lasty = y(indexOfMin(counter - 1));
% Set the already used distances to infinity so we won't consider them.
x(alreadyUsed) = inf;
% Compute distances from last point to all other points.
distances = sqrt((x - lastx) .^ 2 + (y - lasty) .^ 2);
[minDistance, indexOfMin(counter)] = min(distances);
% Find out the x and y of the closest point.
closestX = x(indexOfMin(counter));
closestY = y(indexOfMin(counter));
% Draw a line from the closest point to (0, 0)
line([lastx, closestX], [lasty, closestY], 'LineWidth', 2, 'Color', 'r');
% Mark this point as having already been used.
alreadyUsed(indexOfMin(counter)) = true;
counter = counter + 1;
end
0000 Screenshot.png
Note that this will not always or necessarily give you the shortest path length, like solving the traveling salesman problem will.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!