首页 文章

在matlab / simulink中输入3D鼠标

提问于
浏览
0

我想在Matlab oR Simulink中通过鼠标获取输入坐标,在Matlab中没有通过鼠标设备输入3D坐标的内置工具,但是buit-in函数 ginput 只能存储鼠标的2D坐标,有没有在MATLAB / SIMULINK中通过鼠标设备输入3D坐标的可能性?

1 回答

  • 0

    如果我理解正确,那么当绘图是3D时,您希望获得鼠标单击的坐标(在数据空间中) . 也就是说,您单击绘图中的某个位置并返回当前位置 . 我之前已经解决了这个问题 .

    这项任务的主要困难 - 以及其他海报提到的 - 是你点击2D屏幕 . 因此,您无法在2D屏幕上唯一指定3个独立位置 . 而是,单击屏幕定义垂直于屏幕平面的线段,沿该线的任何3D点同样有效 . 你明白为什么会这样吗?

    要演示,请在Matlab中尝试这个简短的示例:

    surf(peaks);  %draw a sample plot
    keydown = 2;
    while keydown ~= 0,
       disp('Click some where on the figure');
       keydown = waitforbuttonpress;   
    end
    currPt = get(gca,'CurrentPoint');
    disp(currPt);
    

    你会发现currPt是一个2x3矩阵 . 这定义了该行的起点和终点 . 我们现在绘制这条线:

    hold on;
    plot3( currPt(:,1), currPt(:,2), currPt(:,3), 'k-', 'LineWidth', 2);
    view(-19,46);  %rotate to view this line
    

    所以问题是:如何定义要沿此行选择的点?那么答案取决于您首先拥有的数据类型 . 如果您有点数据,那么精确选择一个顶点可能会很棘手,您可能需要对数据进行一些后处理(例如,计算数据集中最接近currPt线的点) . 如果您有补丁或曲面数据(例如此示例),则这只是直线和平面的交点 .

    File Exchange上有一些工具可以获取各种数据集的3D点 . 我刚发现的一个是:http://www.mathworks.com/matlabcentral/fileexchange/7594-click3dpoint

相关问题