# The "union" function for polyshapes performs an incorrect consolidation of adjacent polyshapes when presented as a vector

19 Ansichten (letzte 30 Tage)
Matt J am 7 Mai 2024
Bearbeitet: MathWorks Support Team am 4 Jun. 2024 um 17:59
I have a polyshape vector "pv" consisting of 4 adjacent triangles:
plot(pv)
Why is it that when the polyshape vector elements are ordered one way, the "union" operation successfully consolidates them, whereas in the reverse order, it does not?
pv1=pv([4,1,2,3]);
plot(union(pv1))
pv1=pv([4,1,2,3]);
plot(union(pv1))
As an additional observation, I find that if the union is performed incrementally on two of the "pv(i)" at a time, using a for-loop, the problem does not manifest. Moreover, this is irrespective of the loop order.
u=polyshape();
for i=randperm(4);
u=union(u,pv(i));
end
plot(u)
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
Matt J am 7 Mai 2024
Bearbeitet: Matt J am 8 Mai 2024
As an additional observation, I find that if the union is performed incrementally on two of the pv(i) at a time, using a for-loop, the problem does not manifest. Moreover, this is irrespective of the loop order.
u=polyshape();
for i=randperm(4); u=union(u,pv(i)); end
plot(u)

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

Matt J am 10 Mai 2024
Bearbeitet: MathWorks Support Team am 4 Jun. 2024 um 17:59
A limitation has been discovered in the union operation for polyshapes. The development team has been notified about this issue and a fix for this issue may be implemented for a future release of MATLAB. Unfortunately, incremental use of the union operation via loops would be the suggested workaround until the fix is released as demonstrated in the code snippet shared:
u=polyshape();
for i=randperm(4);
u=union(u,pv(i));
end
plot(u)
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (1)

Walter Roberson am 8 Mai 2024
polyshapes contains oriented polygons. A polyshape with its vertices backwards is considered to be reverse direction.
This is important because multiple polyshapes together can describe "holes".
If you have two polyshapes with one insided the other, and the polyshapes are the same orientation, then the union of the two is the outer one. If the polyshapes are different orientation, then the union of the two is the area between the outer shape and the inner shape -- the inner shape will be a hole in the outer shape.
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
Matt J am 9 Mai 2024
Bearbeitet: Matt J am 9 Mai 2024
Not sure how that applies here. All of the polygons seem to have vertices in the same counter-clockwise orientation and none of the polygons is nested inside any of the others. I also don't see how it explains the order-dependence of the union() operation.
for i=1:4
figure
hold on
plot(pv(i));
scatlabel( scatter(pv(i).Vertices(:,1), pv(i).Vertices(:,2)) );
hold off
end

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Elementary Polygons finden Sie in Help Center und File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!

Translated by