我在黑白圖像中有一些點。我有質心的座標x,y,我想順時針排列它們。要做到這些,我想使用角度。然而,我有一個很大的困惑:我假設atan2的座標軸位於我照片的中心。然後,我使用其中的一個點作爲偏移量以使零角度在那裏。atan2的範圍,當使用照片的座標時混淆
我完全困惑嗎?這很難實現嗎?我只想得到所有點的角度,角度零點是我選擇的點,然後使用角度以順時針方向(增加角度方向)對質心排序。
我希望我能在你的幫助下解決這個問題!非常感謝, 赫
我在黑白圖像中有一些點。我有質心的座標x,y,我想順時針排列它們。要做到這些,我想使用角度。然而,我有一個很大的困惑:我假設atan2的座標軸位於我照片的中心。然後,我使用其中的一個點作爲偏移量以使零角度在那裏。atan2的範圍,當使用照片的座標時混淆
我完全困惑嗎?這很難實現嗎?我只想得到所有點的角度,角度零點是我選擇的點,然後使用角度以順時針方向(增加角度方向)對質心排序。
我希望我能在你的幫助下解決這個問題!非常感謝, 赫
實施例:
% 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
函數使用(查看它的源代碼)。
複數也用它來計算[相角](http://www.mathworks.com/help/matlab/ref/angle.html),所以你可以這樣寫:'theta = angle(complex(xy _(:, 1),xy _(:, 2) ))' – Amro
這應該不是太難。但請給我們一些代碼和一個好bugreport(你期望什麼?發生了什麼?) 一個示例圖像連同代碼和預期結果也將有所幫助。 (另外,atan2的原點是0 | 0) –
類似的問題:[在MATLAB中順時針排列多邊形點](http://stackoverflow.com/q/13935324/97160) – Amro