Matlab任意兩點之間繪製帶箭頭的直線
阿新 • • 發佈:2018-11-13
工作環境(藍色粗體字為特別注意內容)
1,開發環境:Matlab 2012b win32
2,程式語言:Matlab
最近需要使用matlab繪製帶箭頭的直線,發現如下方式可以繪製帶箭頭的直線
1.呼叫annotation函式繪製二維箭頭annotation函式用來在當前圖形視窗建立註釋物件(annotation物件),它的呼叫格式如下: (1) annotation(annotation_type) % 以指定的物件型別,使用預設屬性值建立註釋物件。 (2) annotation('line',x,y) % 建立從(x(1), y(1))到(x(2), y(2))的線註釋物件。 (3) annotation('arrow',x,y) % 建立從(x(1), y(1))到(x(2), y(2))的箭頭註釋物件。 (4) annotation('doublearrow',x,y)% 建立從(x(1), y(1))到(x(2), y(2))的雙箭頭註釋物件。 (5) annotation('textarrow',x,y) % 建立從(x(1),y(1))到(x(2),y(2))的帶文字框的箭頭註釋物件 (6) annotation('textbox',[x y w h]) % 建立文字框註釋物件,左下角座標(x,y),寬w,高h. (7) annotation('ellipse',[x y w h]) % 建立橢圓形註釋物件。 (8) annotation('rectangle',[x y w h])% 建立矩形註釋物件。 (9) annotation(figure_handle,…) % 在控制代碼值為figure_handle的圖形視窗建立註釋物件。 (10) annotation(…,'PropertyName',PropertyValue,…) % 建立並設定註釋物件的屬性。 (11) anno_obj_handle = annotation(…) % 返回註釋物件的控制代碼值。
發現annotation繪製帶箭頭的直線還挺好用,但是唯一的不足就是需要座標系在[0,1]範圍內的標準座標系,其他座標系中繪製會報錯!!!
於是自己寫了一個函式來繪製帶箭頭的直線,函式如下:
%% 繪製帶箭頭的直線 function drawArrow(start_point, end_point,arrColor,lineColor,arrowSize,lineWidth) % 從start_point到end_point畫一箭頭,arrColor箭頭顏色,arrSize,箭頭大小 %判斷引數多少 switch nargin case 2 arrColor = 'r'; lineColor = 'b'; arrowSize = 2; lineWidth = 1; case 3 lineColor = 'b'; arrowSize = 2; lineWidth = 1; case 4 arrowSize = 2; lineWidth = 1; case 5 lineWidth = 1; end K = 0.05; % 箭頭比例係數 theta = pi / 8; % 箭頭角度 A1 = [cos(theta), -sin(theta); sin(theta), cos(theta)]; % 旋轉矩陣 theta = -theta; A2 = [cos(theta), -sin(theta); sin(theta), cos(theta)]; % 旋轉矩陣 arrow = start_point' - end_point'; %使得箭頭跟直線長短無關(固定值) arrow(arrow>=0) = arrowSize; arrow(arrow<0) = -arrowSize; arrow_1 = A1 * arrow; arrow_2 = A2 * arrow; arrow_1 = K * arrow_1 + end_point'; % 箭頭的邊的x座標 arrow_2 = K * arrow_2 + end_point'; % 箭頭的變的y座標 hold on; grid on; axis equal; plot([start_point(1), end_point(1)], [start_point(2), end_point(2)],lineColor,'lineWidth',lineWidth); % 三角箭頭(填充) triangle_x = [arrow_1(1),end_point(1),arrow_2(1),arrow_1(1)]; triangle_y = [arrow_1(2),end_point(2),arrow_2(2),arrow_1(2)]; fill(triangle_x,triangle_y,arrColor); % 線段箭頭(不填充) % plot([arrow_1(1), end_point(1)], [arrow_1(2), end_point(2)],color,'lineWidth',arrowSize); % plot([arrow_2(1), end_point(1)], [arrow_2(2), end_point(2)], color,'lineWidth',arrowSize); hold off; end
效果如下:
效果完美~~~~