0试验效果


.

1问题描述

问题是这样的,我希望在旋转其中一个AXES的视角的同时,其他AXES跟着以相同视角旋转。


.

2解决思路

2.1AXES标签
我们首先需要确认AXES是哪个是哪个,因此我们需要为AXES设置标签,TagUserData 均可(其实用位置信息也可以,但显得没有那么整洁):

% 创建figure窗口
fig=figure();
fig.Position=[200 100 900 450];% 创建axes1
ax1=axes(fig);
ax1.Position=[0.05 0.1 0.4 0.8];
ax1.UserData=1;
hold(ax1,'on') % 这步hold是必要的,防止UserData属性或Tag属性被刷掉
grid(ax1,'on') % 加个网格,为了好看而已不必要% 创建axes2
ax2=axes(fig);
ax2.Position=[0.55 0.1 0.4 0.8];
ax2.UserData=2;
hold(ax2,'on')
grid(ax2,'on')

2.2鼠标按住且滑动判断
判断鼠标是否在点击状态下滑动
与之前刮刮乐那篇类似,首先判断鼠标是否否被按住。因此我们设置一个名为 isClicking 的变量,并设置鼠标按下和鼠标松开两个回调函数,当鼠标点击时将 isClicking 设置为true,当鼠标松开时 isClicking 设置为false。
之后就可以通过WindowButtonMotionFcn回调判断鼠标是否移动:

isClicking=false;
set(fig,'WindowButtonDownFcn',@bt_down);  % 设置鼠标按下回调
set(fig,'WindowButtonUpFcn',@bt_up);      % 设置鼠标松开回调
set(fig,'WindowButtonMotionFcn',@bt_move);% 设置鼠标移动回调function bt_down(~,~),isClicking=true;end % 鼠标按下回调
function bt_up(~,~),isClicking=false;end  % 鼠标松开回调
function bt_move(~,~)if isClicking% 代码能运行到这里说明鼠标被按住的同时滑动了% 以下为后续要写的一大堆代码:% 。。。 。。。end
end

2.3更改其他AXES的view属性
我们首先可以获得fig的CurrentAxes属性,即当前点击的坐标区域,然后我们获得当前坐标区域的UserData属性能够判断出当前点击的是哪个坐标区域,之后就可以将其他坐标区域的view属性设置的与当前坐标区域相同:
把bt_move函数做如下更改即可:

function bt_move(~,~)if isClickingtempAxes=fig.CurrentAxes;for i=1:2 % 两个axesif i~=tempAxes.UserDataotherAxes=findobj('UserData',i);otherAxes.View=tempAxes.View;endendend
end

.

3完整代码

3.1 两个或多个AXES
以下代码只做为示例,想要更多的坐标区域只需要设置更多的axes并调整position userdata等参数即可:

function SCR_2Axes
% @author:slandarer% 创建figure窗口
fig=figure();
fig.Position=[200 100 900 450];% 创建axes1
ax1=axes(fig);
ax1.Position=[0.05 0.1 0.4 0.8];
ax1.UserData=1;
hold(ax1,'on') % 这步hold是必要的,防止UserData属性或Tag属性被刷掉
grid(ax1,'on') % 加个网格,为了好看而已不必要% 创建axes2
ax2=axes(fig);
ax2.Position=[0.55 0.1 0.4 0.8];
ax2.UserData=2;
hold(ax2,'on')
grid(ax2,'on')isClicking=false;
set(fig,'WindowButtonDownFcn',@bt_down);  % 设置鼠标按下回调
set(fig,'WindowButtonUpFcn',@bt_up);      % 设置鼠标松开回调
set(fig,'WindowButtonMotionFcn',@bt_move);% 设置鼠标移动回调function bt_down(~,~),isClicking=true;end % 鼠标按下回调
function bt_up(~,~),isClicking=false;end  % 鼠标松开回调
function bt_move(~,~)if isClickingtempAxes=fig.CurrentAxes;for i=1:2 % 两个axesif i~=tempAxes.UserDataotherAxes=findobj('UserData',i);otherAxes.View=tempAxes.View;endendend
end% 在这里绘图===============================================================
plot3(ax1,[0,1],[0,1],[0,1],'LineWidth',2)
scatter3(ax2,rand([10,1]),rand([10,1]),rand([10,1]),'filled')
% =========================================================================end


3.2 超多AXES
以下给出mxn个AXES批量构建的方法,使用到坐标区域数组:

function SCR_mnAxes
% @author:slandarer% 创建figure窗口
fig=figure();
fig.Position=[200 100 900 450];M=2;N=4;% 两行四axes
% 创建axes
for m=1:Mfor n=1:Nax(m,n)=axes(fig);ax(m,n).Position=[0.1*(1/N)+(1/N)*(n-1),...0.1*(1/M)+(1/M)*(m-1),...0.8*(1/N),0.8*(1/M)];ax(m,n).UserData=[m,n];hold(ax(m,n),'on')grid(ax(m,n),'on')end
endisClicking=false;
set(fig,'WindowButtonDownFcn',@bt_down);  % 设置鼠标按下回调
set(fig,'WindowButtonUpFcn',@bt_up);      % 设置鼠标松开回调
set(fig,'WindowButtonMotionFcn',@bt_move);% 设置鼠标移动回调function bt_down(~,~),isClicking=true;end % 鼠标按下回调
function bt_up(~,~),isClicking=false;end  % 鼠标松开回调
function bt_move(~,~)if isClickingtempAxes=fig.CurrentAxes;for mm=1:Mfor nn=1:Nif ~all([mm,nn]==tempAxes.UserData)ax(mm,nn).View=tempAxes.View;endendendend
end
% 在这里绘图===============================================================
for m=1:Mfor n=1:Nscatter3(ax(m,n),rand([5,1]),rand([5,1]),rand([5,1]),'filled')end
end
% =========================================================================end

MATLAB 让两个或多个AXES同步旋转相关推荐

  1. 【 MATLAB 】两个序列的卷积和运算的MATLAB实现(2)

    已知下面两个序列: 求这两个序列的卷积. 求卷积的函数是conv,但是使用这个函数有个问题,就是下标问题,也就是求卷积之后的元素值的位置.因此,我们必须要定一个起始点和一个结束点. 方法: 是两个有限 ...

  2. matlab if语句多个执行举例,初学Matlab,有两个语句,if语句和switch语句,有两个例子哪位大神能帮我讲讲...

    问题描述: 初学Matlab,有两个语句,if语句和switch语句,有两个例子哪位大神能帮我讲讲 if logical_expression statements elseif logical_ex ...

  3. matlab 求曲面体积,matlab求两曲面之间的体积

    MATLAB求曲面相交所成空间曲线的图形 放在你程序后也可,单独运行也行:t=-0.1:0.1:2*pi;x=2*cos(t);%交线参数方程z=2*sin(t);y1=sqrt(5)*ones(si ...

  4. 两阶段鲁棒优化模型 多场景 采用matlab编程两阶段鲁棒优化程序

    两阶段鲁棒优化模型 多场景 采用matlab编程两阶段鲁棒优化程序,考虑四个场景,模型采用列与约束生成(CCG)算法进行求解,场景分布的概率置信区间由 1-范数和∞-范数约束,程序含拉丁超立方抽样+k ...

  5. 光伏发电并网逆变simulink/matlab仿真 两级三相/单相系统

    光伏发电并网逆变simulink/matlab仿真 两级三相/单相系统 前级采用boost升压斩波电路 mppt最大功率点跟踪采用扰动观察法 可接单相或者三相并网逆变 id=666229534115& ...

  6. matlab两轮自平衡小车,基于MATLAB的两轮自平衡小车系统模型辨识.pdf

    基于MATLAB的两轮自平衡小车系统模型辨识 学兔兔 第1期 (总第170期) 机 械 工程 与 自动 化 NO.1 2012年 2月 MECHANICAL ENGINEERING & AUT ...

  7. MATLAB将两条曲线画在同一个图上

    在MATLAB中将两条曲线画在同一个图上,如果直接采用下面的代码,那么画的第二个图会将第一个图覆盖 plot(x,p1,'LineWidth',2); plot(x,p2,'LineWidth',2) ...

  8. 利用matlab软件求数列的中值,matlab求两个数列的方差

    matlab怎么求矩阵所有元素的期望和方差? 标准差s=std(X(1:end),flag)flag=0,采用1/(N-1)的系数,flag=1,采用1/(N)的系数 matlab用var函数算出的方 ...

  9. 用matlab求双侧曲面积分,基于Matlab的两类曲面积分计算

    第 38 卷第 2 期 唐山师范学院学报 2016 年 3 月 Vol.38 No.2 Journal of Tangshan Normal University Mar. 2016 ──────── ...

最新文章

  1. python 测试linux dev文件,Linux测试开发人员要掌握的Linux命令有哪些?
  2. 应用调试(四)系统调用SWI
  3. 2020下半年新机最新消息_2020下半年新机汇总,除了iPhone 12,还有这些旗舰
  4. 有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数
  5. 编程方法学18:多维数组收尾
  6. android中SO文件动态调试
  7. zuul路由前缀配置
  8. cad小插件文字刷_文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件
  9. 4000字超干货!《统计学习方法》啃书指南
  10. ssm框架验证码图片加载不出_基于SSM框架的文件图片上传/下载功能实现
  11. windows下调用外部exe程序 SHELLEXECUTEINFO
  12. C-COT跟踪算法在OTB数据集上测试的接口函数
  13. Gitlab权限说明
  14. 漫话:如何给女朋友解释为什么有些网站域名不以www开头
  15. vsftp配置虚拟账户
  16. ucore开启虚拟存储器过程详解
  17. RabbitMQ的流量控制策略
  18. java简单人物介绍
  19. openeuler 欧拉操作系统的几个图形界面安装方法
  20. 山东大学移动信息门户03

热门文章

  1. python txt 读取 写入
  2. 虹科Celerity™ 光纤通道卡(FC HBA)功能简介
  3. 苹果CMSv10首涂第十五套原创精简白色圆角阴影经典视频手机模板
  4. Gated-SCNN: Gated Shape CNNs for Semantic Segmentation
  5. CMU运动捕捉数据处理 MOCAP(一)——数据介绍
  6. properties 文件 属性值过长换行如理 测试读取配置文件
  7. 【达内课程】面向对象之多态
  8. Postman查看Elasticsearch自带的分词器效果
  9. PBJ | 浙大马斌/茶叶所徐平-微生物组关联分析茶树-微生物遗传机制
  10. 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx