MATLAB 让两个或多个AXES同步旋转
0试验效果
.
1问题描述
问题是这样的,我希望在旋转其中一个AXES的视角的同时,其他AXES跟着以相同视角旋转。
.
2解决思路
2.1AXES标签
我们首先需要确认AXES是哪个是哪个,因此我们需要为AXES设置标签,Tag 或 UserData 均可(其实用位置信息也可以,但显得没有那么整洁):
% 创建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同步旋转相关推荐
- 【 MATLAB 】两个序列的卷积和运算的MATLAB实现(2)
已知下面两个序列: 求这两个序列的卷积. 求卷积的函数是conv,但是使用这个函数有个问题,就是下标问题,也就是求卷积之后的元素值的位置.因此,我们必须要定一个起始点和一个结束点. 方法: 是两个有限 ...
- matlab if语句多个执行举例,初学Matlab,有两个语句,if语句和switch语句,有两个例子哪位大神能帮我讲讲...
问题描述: 初学Matlab,有两个语句,if语句和switch语句,有两个例子哪位大神能帮我讲讲 if logical_expression statements elseif logical_ex ...
- matlab 求曲面体积,matlab求两曲面之间的体积
MATLAB求曲面相交所成空间曲线的图形 放在你程序后也可,单独运行也行:t=-0.1:0.1:2*pi;x=2*cos(t);%交线参数方程z=2*sin(t);y1=sqrt(5)*ones(si ...
- 两阶段鲁棒优化模型 多场景 采用matlab编程两阶段鲁棒优化程序
两阶段鲁棒优化模型 多场景 采用matlab编程两阶段鲁棒优化程序,考虑四个场景,模型采用列与约束生成(CCG)算法进行求解,场景分布的概率置信区间由 1-范数和∞-范数约束,程序含拉丁超立方抽样+k ...
- 光伏发电并网逆变simulink/matlab仿真 两级三相/单相系统
光伏发电并网逆变simulink/matlab仿真 两级三相/单相系统 前级采用boost升压斩波电路 mppt最大功率点跟踪采用扰动观察法 可接单相或者三相并网逆变 id=666229534115& ...
- matlab两轮自平衡小车,基于MATLAB的两轮自平衡小车系统模型辨识.pdf
基于MATLAB的两轮自平衡小车系统模型辨识 学兔兔 第1期 (总第170期) 机 械 工程 与 自动 化 NO.1 2012年 2月 MECHANICAL ENGINEERING & AUT ...
- MATLAB将两条曲线画在同一个图上
在MATLAB中将两条曲线画在同一个图上,如果直接采用下面的代码,那么画的第二个图会将第一个图覆盖 plot(x,p1,'LineWidth',2); plot(x,p2,'LineWidth',2) ...
- 利用matlab软件求数列的中值,matlab求两个数列的方差
matlab怎么求矩阵所有元素的期望和方差? 标准差s=std(X(1:end),flag)flag=0,采用1/(N-1)的系数,flag=1,采用1/(N)的系数 matlab用var函数算出的方 ...
- 用matlab求双侧曲面积分,基于Matlab的两类曲面积分计算
第 38 卷第 2 期 唐山师范学院学报 2016 年 3 月 Vol.38 No.2 Journal of Tangshan Normal University Mar. 2016 ──────── ...
最新文章
- python 测试linux dev文件,Linux测试开发人员要掌握的Linux命令有哪些?
- 应用调试(四)系统调用SWI
- 2020下半年新机最新消息_2020下半年新机汇总,除了iPhone 12,还有这些旗舰
- 有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数
- 编程方法学18:多维数组收尾
- android中SO文件动态调试
- zuul路由前缀配置
- cad小插件文字刷_文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件
- 4000字超干货!《统计学习方法》啃书指南
- ssm框架验证码图片加载不出_基于SSM框架的文件图片上传/下载功能实现
- windows下调用外部exe程序 SHELLEXECUTEINFO
- C-COT跟踪算法在OTB数据集上测试的接口函数
- Gitlab权限说明
- 漫话:如何给女朋友解释为什么有些网站域名不以www开头
- vsftp配置虚拟账户
- ucore开启虚拟存储器过程详解
- RabbitMQ的流量控制策略
- java简单人物介绍
- openeuler 欧拉操作系统的几个图形界面安装方法
- 山东大学移动信息门户03
热门文章
- python txt 读取 写入
- 虹科Celerity™ 光纤通道卡(FC HBA)功能简介
- 苹果CMSv10首涂第十五套原创精简白色圆角阴影经典视频手机模板
- Gated-SCNN: Gated Shape CNNs for Semantic Segmentation
- CMU运动捕捉数据处理 MOCAP(一)——数据介绍
- properties 文件 属性值过长换行如理 测试读取配置文件
- 【达内课程】面向对象之多态
- Postman查看Elasticsearch自带的分词器效果
- PBJ | 浙大马斌/茶叶所徐平-微生物组关联分析茶树-微生物遗传机制
- 解决卸载或者安装程序失败的问题,提示:错误 1402。无法打开键UNKNOWN\Components\xxx