matlab输入数组出曲线,用鼠标画出曲线,并将曲线所经过的点保存到数组中
function tmouse2(action)
A=imread('e:\a.jpg');
imshow(A);
global Xall Yall N??InitialX InitialY FigHandle
% TMOUSE 本例展示如何以Handle Graphics來設定滑鼠事件(Mouse
% Events)的反應指令(Callbacks)
if nargin == 0, action = 'start'; end
switch(action)
% 開啟圖形視窗
case 'start',
% 設定滑鼠按鈕被按下時的反應指令為「tmouse down」
set(gcf, 'WindowButtonDownFcn', 'MouseDraw down');
FigHandle = figure('WindowButtonDownFcn','MouseDraw down');
% 滑鼠按鈕被按下時的反應指令
case 'down',
if strcmp(get(FigHandle, 'SelectionType'), 'normal')
set(FigHandle,'pointer','hand');
CurPiont = get(gca, 'CurrentPoint');
InitialX = CurPiont(1,1);
InitialY = CurPiont(1,2);
% 設定滑鼠移動時的反應指令為「tmouse move」
set(gcf, 'WindowButtonMotionFcn', 'MouseDraw move');
% 設定滑鼠按鈕被釋放時的反應指令為「tmouse up」
set(gcf, 'WindowButtonUpFcn', 'MouseDraw up');
elseif strcmp(get(FigHandle, 'SelectionType'), 'alt')
set(FigHandle, 'Pointer', 'arrow');
set( FigHandle, 'WindowButtonMotionFcn', '')
set(FigHandle, 'WindowButtonUpFcn', '')
fprintf('MouseDraw right button down!\n');
axes(FigHandle.Children),cla;%刪除坐標圖像
end
% 滑鼠移動時的反應指令
case 'move',
currPt = get(gca, 'CurrentPoint');
%? ?? ?? ? X = currPt(1,1);
%? ?? ?? ?Y = currPt(1,2);
Xall = evalin('base','Xall');
Yall = evalin('base','Yall');
Xall=[Xall;currPt(1,1)];
Yall=[Yall;currPt(1,2)];
assignin('base','Xall',Xall);
assignin('base','Yall',Yall);
x_gap = 0.1;? ? % 定義x方向增量
y_gap = 0.1;? ? % 定義y方向增量
if currPt(1,1) > InitialX
step_x = x_gap;
else
step_x = -x_gap;
end
if currPt(1,2)> InitialY
step_y = y_gap;
else
step_y = -y_gap;
end
% 定義x,y的變化范圍和步長
if abs(currPt(1,1)-InitialX) < 0.01? ?? ???% 線平行于y軸,即斜率不存在時
iy = InitialY:step_y:currPt(1,2);
ix = currPt(1,1).*ones(1,size(iy,2));
else
ix = InitialX:step_x:currPt(1,1) ;? ? % 定義x的變化范圍和步長
% 當斜率存在,即k = (Y-InitialY)/(X-InitialX) ~= 0
iy = (currPt(1,2)-InitialY)/(currPt(1,1)-InitialX).*(ix-InitialX)+InitialY;
end
ImageX = [ix, currPt(1,1)];
ImageY = cat(2, iy, currPt(1,2));
line(ImageX,ImageY, 'marker', '.', 'markerSize',0.5, ...
'LineStyle', '-', 'LineWidth', 0.5, 'Color', 'Red');
%fprintf('Current location = (%g, %g)\n', currPt(1,1), currPt(1,2));
InitialX = currPt(1,1);? ?? ? %記住當前點坐標
InitialY = currPt(1,2);? ?? ? %記住當前點坐標
N=length(Xall);
% 滑鼠按鈕被釋放時的反應指令
case 'up',
% 清除滑鼠移動時的反應指令
set(gcf, 'WindowButtonMotionFcn', '');
% 清除滑鼠按鈕被釋放時的反應指令
set(gcf, 'WindowButtonUpFcn', '');
fprintf('N=%d\n',N);
end
總結
以上是生活随笔為你收集整理的matlab输入数组出曲线,用鼠标画出曲线,并将曲线所经过的点保存到数组中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: include 路由 php,PHP简单
- 下一篇: 函数matlab,Matlab函数