gpt4 book ai didi

matlab - 按对最短距离排序

转载 作者:行者123 更新时间:2023-12-02 08:39:56 26 4
gpt4 key购买 nike

这是我的问题。

clc; clear all; close all;  
N = 10;
R = randn(N,1)+10;R(end) = R(1);
tht = linspace(0,2*pi,N).';
x = R.*cos(tht);
y = R.*sin(tht);
plot(x, y,'o-b');

随机排序数组

X = x(randperm(size(x,1)),:);
Y = y(randperm(size(y,1)),:);
hold on, plot(X,Y,'o-r');

可以看出绘制的轮廓具有重叠区域。所以我想画一个不重叠的封闭轮廓。我得到的一个想法是对矩阵的元素进行排序,使矩阵元素之间的相邻距离最小。因此最近的点将彼此相邻。

谁能具体说明我该怎么做?我尝试使用 pdist2 但失败了。

最佳答案

如果我没理解错的话,您想要重新排序一些顶点,以便在后续点之间绘制的所有线形成一个闭合的、不重叠的轮廓。

这可以通过围绕所有点的质心以(逆时针)方式重新排列顶点来实现。在 2D 中,这可以通过对 atan2 的输出进行排序来最容易地完成。 :

%// Compute centre of mass
r_COM = sum([X, Y]) / numel(X);

%// Sort all vertices by angle
[~, I] = sort(atan2(Y - r_COM(2), X - r_COM(1)));

%// Plot the new contour
hold on, plot(X([I; I(1)]),Y([I; I(1)]), '.-k', 'linewidth', 2);

结果:

results

关于matlab - 按对最短距离排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17543271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com