How to order vertices of a flat convex polygon in 3d space along the edge?
29 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jan von Kölln
el 11 de Nov. de 2018
Editada: Bruno Luong
el 12 de Nov. de 2018
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 comentarios
Bruno Luong
el 12 de Nov. de 2018
Editada: Bruno Luong
el 12 de Nov. de 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)
Respuesta aceptada
Bruno Luong
el 11 de Nov. de 2018
Editada: Bruno Luong
el 11 de Nov. de 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))
Más respuestas (0)
Ver también
Categorías
Más información sobre Computational Geometry en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!