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 个评论
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
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))
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Computational Geometry 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!