How to select, or filter, the external border/boundary in a set of (x,y)-points?
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Given two or more set of points (please see attached, as example, two sets of points called "b1" and "b2", that are stored in "borders.mat"), how can I select or filter the common external border/boundary from the union of those point datasets?
After joining the two datasets, I would like to keep only the points that represent the total common external border (i.e. removing any common set of points or any "internal" point). Here, in this example, I show only two set of points, but I have many of them.
load("borders.mat")
hold on
plot(b1(:,1),b1(:,2))
plot(b2(:,1),b2(:,2))
0 commentaires
Réponse acceptée
Dyuman Joshi
le 10 Juil 2023
load("borders.mat");
%Original figure
plot(b1(:,1),b1(:,2))
hold on
plot(b2(:,1),b2(:,2))
%Obtain coordinates corresponding to outside border by performing
%exclusive OR on the data
z=setxor(b1,b2,'rows','stable');
%'stable' option is to maintain the order of the coordinates
%plot the boundary
figure
plot(z(:,1),z(:,2),'k')
0 commentaires
Plus de réponses (1)
MarKf
le 10 Juil 2023
As in
borders = load(websave('rd', "https://nl.mathworks.com/matlabcentral/answers/uploaded_files/1430803/borders.mat"));
b1 = borders.b1; b2 = borders.b2;
idx_common = ismember(b1,b2,'rows');
coordsincommon = b1(idx_common,:); %169
It seems that they are the exact same coordinates, so this works, tho I haven't checked if it captures them all, otherwise there is also ismembertol
2 commentaires
MarKf
le 7 Août 2023
Yeah the accepted answer is what you want more straightfowardly, setxor being the opposite of ismember (very useful but there is no tolerance version).
I showed how you can get those common points, answering your specific "how can I select [or filter] the common external border/boundary from the union of those point datasets?" query, you could've then used the index provided (idx_common) to filter them out. You plotted only the common boundary points directly (last point seem to get captured first or viceversa).
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!