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

28 次查看(过去 30 天)
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 个评论
Jan von Kölln
Jan von Kölln 2018-11-11
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 2018-11-12
编辑:Bruno Luong 2018-11-12
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)

请先登录,再进行评论。

采纳的回答

Bruno Luong
Bruno Luong 2018-11-11
编辑:Bruno Luong 2018-11-11
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 个评论
Jan von Kölln
Jan von Kölln 2018-11-11
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!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Computational Geometry 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by