1. 程式人生 > >Matlab任意兩點之間繪製帶箭頭的直線

Matlab任意兩點之間繪製帶箭頭的直線

工作環境(藍色粗體字為特別注意內容)

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

效果如下:

效果完美~~~~