How to order vertices of a flat convex polygon in 3d space along the edge?

27 vues (au cours des 30 derniers jours)
I have a list of xyz-coordinates which build a flat polygon and i need to order them clockwise or counterclockwise. Its not important which direction it is though. I tried to use the atan2() function by calculating rays from the center of the polygon but it fails if the polygon is close to vertical. I would like to implement an approach which works without exceptions. Here is an example of 5 points.
-2.6055 1.1850 0.0880
-2.6320 1.1700 -0.0593
-2.3126 1.2170 -0.4326
-2.1860 1.2672 0.3596
-1.6203 1.4446 -0.0687
Thank you in advance!
  2 commentaires
Jan von Kölln
Jan von Kölln le 11 Nov 2018
I found a way to give me a list of which lines build the vertices. So my goal is to isolate the different Points. How can i do that?
233 291
291 387
388 387
388 471
233 471
I need to keep the order and isolate the nodes. In this case, it should be: 291, 387, 388, 471, 233
Bruno Luong
Bruno Luong le 12 Nov 2018
Modifié(e) : Bruno Luong le 12 Nov 2018
E = [...
233 291;
100 233;
291 387;
388 387;
388 471;
100 471 ]
n = size(E,1);
[u,~,L] = unique(E);
[~,is] = sort(L);
is(is) = flip(reshape(is+n*(2*(is <= n)-1),2,[]));
i = 1+n;
I = zeros(n,1);
for j=1:n
I(j) = i;
i = is(i);
end
V = u(L(I));
disp(V)

Connectez-vous pour commenter.

Réponse acceptée

Bruno Luong
Bruno Luong le 11 Nov 2018
Modifié(e) : Bruno Luong le 11 Nov 2018
xyz =[...
-2.6055 1.1850 0.0880;
-2.6320 1.1700 -0.0593;
-2.3126 1.2170 -0.4326;
-2.1860 1.2672 0.3596;
-1.6203 1.4446 -0.0687 ];
xyzc = mean(xyz,1);
P = xyz - xyzc;
[~,~,V] = svd(P,0);
[~,is] = sort(atan2(P*V(:,1),P*V(:,2)));
xyz = xyz(is([1:end 1]),:);
close all
plot3(xyz(:,1),xyz(:,2),xyz(:,3))
  1 commentaire
Jan von Kölln
Jan von Kölln le 11 Nov 2018
That works, thanks! If you know how to deal with my comment about the lines i would highly appreciate to get the answer. And thank you for your time!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Computational Geometry dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by