Matlab坐标系绘制

0 前言

    Matlab编程常遇到画坐标系的需求,本文对此进行一个总结。

1 坐标系显示

    关于坐标系的创建,参考资料[4]的讨论中提到了一种直接使用画线函数(line)来画出各条坐标轴的方法。然而,在matlab中显示坐标系有更加方便快捷的方法,调用下面的函数即可,效果如图1.1所示(其实,画图的时候默认显示坐标系)。

axis on
图1.1 matlab普通坐标系


2 移动坐标轴到原点

2.1 案例1

    由图1.1可见,对于数学图形而言,这种坐标显示方式与我们熟悉的数学坐标系不一样,我们更加倾向于纵横坐标都经过原点,并且有正方向的箭头。针对这个问题,参考资料[1]写了个函数,用于将坐标轴移动到坐标原点,效果如下图2.1所示:

图2.1 移动坐标轴之后效果图(来源于参考资料[1])

2.2 案例2     

    参考资料[3]也给出了达到这个目的方法。下面是根据参考资料[3]完善的代码:

uoo=1; 
x = -5:0.01:5; 
y = uoo*tanh( uoo*x/2^(1/2) ); 
plot(x,y)
hold on 
axis off
box off
%% x轴
plot([-5,5],[0,0],'k');
x = get(gca,'XTick') + 0.1;
Lx = get(gca,'XTickLabel');
y = zeros( size(x) ) - 0.1;
text(x, y, Lx);
%% y轴
plot([0,0],[-5,5],'k');
y = get(gca,'YTick');
Ly = get(gca,'YTickLabel');
x = zeros( size(y) ) - 0.1;
text(x, y, Ly);

    效果如图2.2所示。

图2.2

3 旋转坐标轴

    有时候,我们希望将坐标轴旋转一个特定的角度。对于这个问题,参考资料[2]的讨论中提到下面的函数:

camroll(axes_handle, dtheta)

    matlab帮助文档中对这个函数的解析为:Rotate camera about view axis。

    测试代码:

clear
clc
axis on
axes_handle = axes();                                                       % 创建一个新坐标系,并使其成为当前坐标系 
dtheta = 45;
camroll(axes_handle, dtheta);                                               % 将坐标系axes_handle旋转角度dtheta

    效果如图3.1所示。

 图3.1 坐标系旋转效果图

    由3.1可见,第2个坐标已经旋转,但是视觉效果并不理想(两条轴线并不垂直!)。

参考资料

[1]MATLAB 把坐标轴(X Y轴)移到坐标原点

[2]一个三维坐标轴旋转的问题

[3]matlab中坐标轴移动

[4]如何绘制三维坐标系,坐标轴相交到同一点O

[5]请问如何用matlab实现坐标绕原点旋转15°得到新的坐标

### 使用MATLAB在极坐标系绘制可旋转的向量 为了在MATLAB中创建一个可以在极坐标系中旋转的向量,可以通过动态更新角度并重新绘制来实现这一效果。下面介绍具体方法。 #### 创建极坐标图对象 首先初始化极坐标环境,利用`polaraxes`命令建立专门用于显示极坐标的区域[^2]。 ```matlab figure; ax = polaraxes; % 创建新的极坐标子图 ``` #### 定义初始状态下的向量数据 设定起始的角度θ以及径向距离r代表向量的位置和长度,在此例子中假设固定半径而仅改变方向角以模拟旋转动作。 ```matlab theta_start = pi / 4; % 初始角度 (弧度单位) rho_fixed = 1; % 向量长度不变 ``` #### 动态更新与重绘过程 通过循环结构逐步调整θ值从而达到视觉上的转动效果,并调用`polarscatter`或类似的绘图指令完成每次迭代后的即时渲染。 ```matlab for angle_degrees = linspace(0, 360, 181)' % 构建从0到360度的变化序列 theta_current = deg2rad(angle_degrees); % 将当前角度转换成弧度 cla(ax); % 清除之前的图像以便刷新 polarscatter(ax, theta_current, rho_fixed,'filled');% 绘制单点作为箭头端部 hold on % 添加额外图形而不覆盖原有内容 plot([0 theta_current],[0 rho_fixed],'LineWidth',2)% 连接原点至目标位置形成直线段 title(['Rotation Angle: ', num2str(angle_degrees), '°']); pause(0.05); % 控制动速度 end hold off % 结束保持模式 ``` 上述代码片段展示了如何构建一个简单的交互式演示程序,它会连续地更改指定范围内各个离散时刻对应的方位角,进而让观察者感受到所展示的对象正在围绕中心做圆周运动的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值