- a for loop
- a loop defined by some curve you're plotting, or
- both.
How do i draw a line between a known point already on the loop and an unkown one, also on the loop?
1 view (last 30 days)
Show older comments
Andreea Stanescu
on 14 Dec 2019
Commented: Andreea Stanescu
on 14 Dec 2019
Hello! I have a problem where i have to draw a closed loop that can contain 4 squares. I made a loop defined by 15 points. How do i draw a line between a known point already on the loop and an unkown one, also on the loop? The thing is that those 15 point define The squares but i have to prove that. Can you, please, give pointers for this as well?
2 Comments
Image Analyst
on 14 Dec 2019
You forgot to include your loop. I don't know if the loop you're talking about is
Also, this sounds like it's probably homework. Is it?
And have you tried using randperm() to get a random index on your loop (I use loop here to mean a list of x,y coordinates that define some curve).
To create a "closed" loop, you can simply tack on the first row of (x,y) coordinates to end of the the 2-D N-by-2 array:
xy = [xy; x(1), y(1)]; % Close the loop.
Accepted Answer
Image Analyst
on 14 Dec 2019
Try this:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 15;
x = [5.5, 6, 4.5, 3.5, 5, 5, 3, 2, 2.5, 3, 2, 2.5, 4, 5, 4.5]
y = [3, 2, 2.5, 1.5, 1.5, 1, 0.5, 1, 2, 3, 4, 4.5, 5, 4, 3.5]
% Append first point to last to close the curve
x = [x, x(1)];
y = [y, y(1)];
plot(x, y, 'r*');
grid on;
knots = [x; y];
areaOfPolygon = polyarea(x,y);
numberOfPoints = length(x);
% Interpolate with a spline curve and finer spacing.
originalSpacing = 1 : numberOfPoints;
% Make 9 points in between our original points that the user clicked on.
finerSpacing = 1 : 0.1 : numberOfPoints;
% Do the spline interpolation.
splineXY = spline(originalSpacing, knots, finerSpacing);
% Plot the interpolated curve.
hold off;
plot(knots(1, :), knots(2, :), 'ro', 'LineWidth', 2, 'MarkerSize', 16);
hold on;
plot(splineXY(1, :), splineXY(2, :), 'b+-', 'LineWidth', 2, 'MarkerSize', 8);
title('Blue Spline Between Red Knots', 'FontSize', fontSize);
legend('Knots', 'Spline');
xlabel('X', 'FontSize', fontSize);
ylabel('Y', 'FontSize', fontSize);
grid on;
hold on;
% Get a known index. "known" because it's one of the training points.
knownIndex = randperm(length(x), 1)
% Get a unknown index. "unknown" because it's one of the interpolated points.
unknownIndex = randperm(length(finerSpacing), 1)
% Get the x,y coordinates for these indexes.
xKnown = knots(1, knownIndex)
yKnown = knots(2, knownIndex)
xUnknown = splineXY(1, unknownIndex)
yUnknown = splineXY(2, unknownIndex)
% Now draw a line between them in dark green.
darkGreen = [0, 0.5, 0];
plot([xKnown, xUnknown], [yKnown, yUnknown], 'o-', ...
'Color', darkGreen, 'MarkerSize', 24, 'LineWidth', 3);
legend('Knots', 'Spline', 'Line between random knot and random point');
![0000 Screenshot.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/254448/0000%20Screenshot.png)
More Answers (0)
See Also
Categories
Find more on Splines in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!