Best way to create a matrix of points?

31 views (last 30 days)
Hello
I have a matrix that contains rectangles(squares in this case), for example:
A=[-5 -4.5 1.5 2; -5 -4.5 2 2.5; -5 -4.5 2.5 3; -4.5 -4 1.5 2; -4.5 -4 2 2.5; -4.5 -4 2.5 3];
for i=1:6
rectangle('Position',[A(i,1) A(i,3) 0.5 0.5]);
hold on;
end
hold on;
axis([-10 10 -10 10])
Each row contains ( ) coordinates.
So in this case the result matrix should contain 12 rows, each represents 1 point, like:
-5 1.5
-5 2
-5 2.5
-5 3
-4.5 1.5
-4.5 2
-4.5 2.5
-4.5 3
-4 1.5
-4 2
-4 2.5
-4 3
The rectangles are not guranteed to form another rectangle, a more realistic set of rectangles:
rect.GIF
  1 Comment
Richárd Tóth
Richárd Tóth on 5 Sep 2019
Edited: Richárd Tóth on 5 Sep 2019
I think I will simply iterate through the rectangles and add all 4 of their points to the result matrix, then select unique rows from the result. If you have a more efficient solution, let me know

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 5 Sep 2019
Edited: Guillaume on 5 Sep 2019
A=[-5 -4.5 1.5 2; -5 -4.5 2 2.5; -5 -4.5 2.5 3; -4.5 -4 1.5 2; -4.5 -4 2 2.5; -4.5 -4 2.5 3];
points = unique([A(:, [1, 3]); A(:, [1, 4]); A(:, [2, 3]); A(:, [2, 4])], 'rows')
is the simplest though posibly not the most efficient.
edit: this may be marginally more efficient, though more obscure:
points = unique(reshape(A(:, [1 1 2 2 3 4 3 4])), 'rows')
  3 Comments
Guillaume
Guillaume on 5 Sep 2019
Oops! How did that happen, should have been:
points = unique(reshape(A(:, [1 1 2 2 3 4 3 4]), [], 2), 'rows')
Bruno Luong
Bruno Luong on 5 Sep 2019
I don't know how A is generated but you might cautious to replace UNIQUE with UNIQUETOL in case two adjacent rectangles do not have the exact match of coordinates due to round-off.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices 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!