如何使MATLAB图交互?

栏目: 编程工具 · 发布时间: 6年前

内容简介:http://stackoverflow.com/questions/9646146/how-to-make-a-matlab-plot-interactive

我试图创建一个简单的界面绘制二次拉格朗日多项式.为此,您只需要3点(每个自己的x,y,z坐标),然后使用二次拉格朗日多项式进行内插.

制作静态版本很简单,甚至可以在绘制曲线之前让用户输入3点.但是,用户也可以将绘图窗口中的现有点拖动到另一个位置,然后使用此点的新位置自动重新绘制曲线!

所以简而言之,用户应该能够将这些黑点拖到另一个位置.之后(或拖动时),曲线应该更新.

function Interact()

% Interactive stuff here

figure();
hold on;
axis([0 7 0 5])

DrawLagrange([1,1; 3,4; 6,2])

function DrawLagrange(P)

plot(P(:,1), P(:,2), 'ko--', 'MarkerSize', 10, 'MarkerFaceColor', 'k')

t = 0:.1:2;
Lagrange = [.5*t.^2 - 1.5*t + 1; -t.^2 + 2*t; .5*t.^2 - .5*t];

CurveX = P(1,1)*Lagrange(1,:) + P(2,1)*Lagrange(2,:) + P(3,1)*Lagrange(3,:);
CurveY = P(1,2)*Lagrange(1,:) + P(2,2)*Lagrange(2,:) + P(3,2)*Lagrange(3,:);

plot(CurveX, CurveY);

我想我不得不使用WindowButtonDownFcn,WindowButtonUpFcn和WindowButtonMotionFcn等功能,或者从图像处理 工具 箱中使用ImPoint.但是怎么样

[编辑]

它也应该在3D中工作,因为我想将这个概念推广到张量产品表面.

好的,我从图像处理工具箱中搜索了有关ImPoint选项的更多信息,并写了这个脚本.

由于ImPoint仅适用于2D设置(我想将其归结为3D,以便能够使用曲面而不是曲线),这并不是一个可以接受的答案!但有人可能会从中受益,或者想出如何在3D中做到这一点.

% -------------------------------------------------
% This file needs the Image Processing Toolbox!
% -------------------------------------------------

function Interact(Pos)

% This part is executed when you run it for the first time.
% In that case, the number of input arguments (nargin) == 0.
if nargin == 0

    close all;
    clear all;
    clc;

    figure();
    hold on;
    axis([0 7 0 5])

    % I do not know how to do this without global variables?
    global P0 P1 P2

    % GCA = Get handle for Current Axis
    P0 = ImPoint(gca,1,1);
    setString(P0,'P0');
    P1 = ImPoint(gca,2,4);
    setString(P1,'P1');
    P2 = ImPoint(gca,6,2);
    setString(P2,'P2');

    % Call subfunction
    DrawLagrange(P0,P1,P2)

    % Add callback to each point
    addNewPositionCallback(P0,@Interact);
    addNewPositionCallback(P1,@Interact);
    addNewPositionCallback(P2,@Interact);

else

    % If there _is_ some input argument, it has to be the updated
    % position of a moved point.
    global H1 H2 P0 P1 P2

    % Display X and Y coordinates of moved point
    Pos

    % Important: remove old plots! Otherwise the graph will get messy.
    delete(H1)
    delete(H2)
    DrawLagrange(P0,P1,P2)

end

function DrawLagrange(P0,P1,P2)

P = zeros(3,2);
% Get X and Y coordinates for the 3 points.
P(1,:) = getPosition(P0);
P(2,:) = getPosition(P1);
P(3,:) = getPosition(P2);

global H1 H2
H1 = plot(P(:,1), P(:,2), 'ko--', 'MarkerSize', 12);

t = 0:.1:2;
Lagrange = [.5*t.^2 - 1.5*t + 1; -t.^2 + 2*t; .5*t.^2 - .5*t];

CurveX = P(1,1)*Lagrange(1,:) + P(2,1)*Lagrange(2,:) + P(3,1)*Lagrange(3,:);
CurveY = P(1,2)*Lagrange(1,:) + P(2,2)*Lagrange(2,:) + P(3,2)*Lagrange(3,:);

H2 = plot(CurveX, CurveY);

为了清楚起见,我添加了一些意见.

[编辑]在预览中,语法高亮不是很好!我应该定义哪个语言被突出显示在某个地方吗?

http://stackoverflow.com/questions/9646146/how-to-make-a-matlab-plot-interactive


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

匠心体验

匠心体验

[法] 艾米丽·布歇 / 吴 博 / 人民邮电出版社 / 2016-11 / 69.00元

本书针对在智能手机和平板电脑的网站及应用程序设计,详细剖析了移动终端服务的用户体验设计要点,阐述了营造舒适的感官体验、甄选内容及功能、提高用户效率、优化等待时间、合理实施教学、情感设计等方面的设计诀窍,并通过大量实例,呈现当今移动终端服务设计中的亮点与雷区。一起来看看 《匠心体验》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具