-1

白黒画像にいくつかのポイントがあります。重心の座標 x、y があり、時計回りに並べたいと思います。これらを行うには、角度を使用したいと思います。ただし、大きな混乱があります。atan2 の座標軸が写真の中心にあると想定しています。次に、ポイントの 1 つをオフセットとして使用して、そこで角度をゼロにします。

私はこれについて完全に混乱していますか?これを達成するのはとても難しいですか?すべてのポイントの角度を取得したいだけです。角度ゼロは選択したポイントであり、角度を使用して重心を時計回りの方向 (角度方向の増加) に並べ替えます。

あなたの助けでこの問題を解決できることを願っています!どうもありがとう、ヘクター

4

1 に答える 1

2

例:

% some random 2D points coordinates
xy = rand(10,2);

% zero-centered
xy_ = bsxfun(@minus, xy, mean(xy));

% compute angles
theta = atan2(xy_(:,2), xy_(:,1));

% sort points clockwise
[~,ord] = sort(theta, 'descend');
xy = xy(ord,:);

% plot newly arranged points and labels
scatter(xy(:,1), xy(:,2), 'filled')
text(xy(:,1), xy(:,2), num2str((1:10)'), 'VerticalAlign','bottom')

% show radius lines
cx = zeros(2,size(xy,1));
cy = zeros(2,size(xy,1));
cx(1,:) = mean(xy(:,1)); cx(2,:) = xy(:,1);
cy(1,:) = mean(xy(:,2)); cy(2,:) = xy(:,2);
line(cx, cy)

角度で並べ替え

atan2間隔で反時計回りに角度を返すことに注意してください: [-pi,pi]. これは実際にはcart2pol関数でも使用されます (ソース コードを表示)。

于 2013-09-24T09:36:09.360 に答える