1
有什麼辦法可以將imline限制爲始終垂直於在同一個對象上繪製的另一個imline。爲前。我使用「imline」畫出第一條線,現在我想在第一條線上畫第二條線以便與之垂直。如果有辦法強制第二條直線與第一條直線垂直,保持延伸長度的靈活性,它將在一定程度上解決我的問題。 我想要像我的圖像上的柔性十字準線(可以沿着軸線旋轉並具有柔性兩側)來測量某個對象的高度和寬度。繪製2 imline與每個其他matlab相互垂直
有什麼辦法可以將imline限制爲始終垂直於在同一個對象上繪製的另一個imline。爲前。我使用「imline」畫出第一條線,現在我想在第一條線上畫第二條線以便與之垂直。如果有辦法強制第二條直線與第一條直線垂直,保持延伸長度的靈活性,它將在一定程度上解決我的問題。 我想要像我的圖像上的柔性十字準線(可以沿着軸線旋轉並具有柔性兩側)來測量某個對象的高度和寬度。繪製2 imline與每個其他matlab相互垂直
代碼:
function perpline()
imshow(rand(200),[]);
line1 = imline(gca,[50 50; 150 150]);
setColor(line1,'r');
line2 = imline(gca,[50 150; 150 50]);
setColor(line2,'g');
addNewPositionCallback(line2,@(pos)callback_line(pos));
function callback_line(pos)
% Must update line1 based on line2's position
pos_line1 = getPosition(line1);
pos_line2 = getPosition(line2);
% Get middle
pos_center = [(pos_line2(1,1)+pos_line2(2,1))/2 (pos_line2(1,2)+pos_line2(2,2))/2];
% Find displacement
vec_disp = [pos_line2(2,1)-pos_line2(1,1) pos_line2(2,2)-pos_line2(1,2)];
% Get normal unit vector
vec_perp = [-vec_disp(2) vec_disp(1)]/norm(vec_disp);
% Preserve length of line2
length_line1 = norm([pos_line1(2,1)-pos_line1(1,1) pos_line1(2,2)-pos_line1(1,2)]);
pos_line1_update = [-vec_perp*length_line1/2+pos_center;
vec_perp*length_line1/2+pos_center];
% Set position
setPosition(line1,pos_line1_update);
end
end
保存它作爲一個函數,然後調用它。您可以拖動綠線,紅線保持垂直。請注意,您必須定義您希望如何保持垂直度。我選擇保留紅線的長度並將其保持在綠線的中心。
嗨jucetain,非常感謝你,我會試試這個,這肯定看起來我想要的。 –
一旦我完成調整線的大小,我不能雙擊並退出,有沒有辦法獲得兩個端點的位置或距離 –
在'callback_line'中,您可以使用'disp'在位置上。或者,您可以讓該函數返回該行的句柄,然後在您想要更新的位置時使用'getPosition'。 – Justin