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
Best way to create a matrix of points?
7 views (last 30 days)
Show older comments
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:
Accepted Answer
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
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
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.
More Answers (0)
See Also
Categories
Find more on Graphics Object Programming 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!