Filter löschen
Filter löschen

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

12 Ansichten (letzte 30 Tage)
I have a polyshape vector "pv" consisting of 4 adjacent triangles:
load tstcase_pv
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?
load tstcase_pv
pv1=pv([4,1,2,3]);
plot(union(pv1))
load tstcase_pv
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.
load tstcase_pv
u=polyshape();
for i=randperm(4);
u=union(u,pv(i));
end
plot(u)
  1 Kommentar
Matt J
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.
load tstcase_pv
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
Matt J am 10 Mai 2024
Bearbeitet: MathWorks Support Team am 4 Jun. 2024
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:
load tstcase_pv
u=polyshape();
for i=randperm(4);
u=union(u,pv(i));
end
plot(u)

Weitere Antworten (1)

Walter Roberson
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
Matt J
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.
load tstcase_pv
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

Produkte


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by