如何将极坐标数据转换为笛卡尔坐标系并绘制[MATLAB]

   2023-03-16 学习力0
核心提示:你想做的事考虑根据与原点的距离 $r$ 和 $xy$ 平面上的角度 $heta$ 绘制数据 $P(r, heta)$。例如,雷达获取的信号包含有关目标范围 $r$ 和方位角 $heta$ 的信息。就是下图。在本文中,$heta$ 是从 $x$ 轴测量的角度。显示示例考虑创建依赖于 $r, heta$ 的虚拟

你想做的事

考虑根据与原点的距离 $r$ 和 $xy$ 平面上的角度 $heta$ 绘制数据 $P(r, heta)$。例如,雷达获取的信号包含有关目标范围 $r$ 和方位角 $heta$ 的信息。就是下图。

極座標データを直交座標系に変換して描画する方法【MATLAB】

在本文中,$heta$ 是从 $x$ 轴测量的角度。

極座標データを直交座標系に変換して描画する方法【MATLAB】

显示示例

考虑创建依赖于 $r, heta$ 的虚拟数据 $P(r, heta)$ 并将其绘制在 $xy$ 平面上。

虚拟数据

生成虚拟数据 $P(r, heta)$ 作为高斯分布与极坐标系中目标位置 $(r_0, heta_0)$ 的乘积。

P(r,	heta) = dfrac{1}{sqrt{2pisigma_r^2}} exp{left[-dfrac{(r-r_0)^2}{2sigma_r^2}ight]}cdot dfrac{1}{sqrt{2pisigma_	heta^2}} exp{left[-dfrac{(	heta-	heta_0)^2}{2sigma_	heta^2}ight]}

$sigma_r^2$, $sigma_heta^2$ 表示距离和角度方差。

变换和绘制

定义距离和角度,并使用 meshgrid 函数将其转换为二维数组。然后,确定目标位置$(r_0, heta_0)$,生成虚拟数据$P(r, heta)$。

% define range and theta
range = linspace(0,2,31); % m
theta = deg2rad(linspace(0,360,91)); % rad
[Range,Theta] = meshgrid(range,theta);

% target position
r0 = 1;
theta0 = deg2rad(75);

% dummy data P
gaussfunc = @(x,mu,sigma) 1/(sqrt(2*pi)*sigma)*exp(-(x-mu).^2/(2*sigma^2));
P = gaussfunc(Range,r0,0.2).*gaussfunc(Theta,theta0,0.2);

接下来,从极坐标系转换为直角坐标系。极坐标$(r, heta)$对应笛卡尔坐标$(x,y)$如下。

left{
egin{align}
x &= rcos{	heta} \
y &= rsin{	heta} 
end{align} 
ight.

通过将距离和角度的二维数组逐个元素相乘,转换为 $x,y$。此外,作为奖励,提取虚拟数据 $P(r, heta)$ 的最大点的索引。

% convert from circular coordinates to Cartesian coordinates
X = Range.*cos(Theta);
Y = Range.*sin(Theta);

% detect max value and its index
[maxval,maxidx] = max(P,[],'all');
[maxidx_row,maxidx_col] = ind2sub(size(P),maxidx);

在 MATLAB 中,使用 .* 获取元素乘积。

曲面图用来。

surface(X,Y,Z,C)

X,Y,Z 是网格状的 $x,y,z$ 坐标,C 是确定颜色的数组。
X,Y,Z,C 的大小必须相同。

曲面图的文档

曲面图本质上是一个在 3D 空间中绘制曲面的函数。但是,由于我们要的是$xy$平面上的二维图像,所以即使$z$坐标的所有值都设置为0也没有问题。这时候,从正上方向下看,就变成了二维图像。

FS = 16; % fontsize
MS = 30; % markersize

figure(1);
clf(1);
surface(X,Y,zeros(size(X)),P,'EdgeColor','none'); % surface plot
hold on;
plot3(X(maxidx),Y(maxidx),0,'.r','MarkerSize',MS); % plot max point
xlabel('x (m)');
ylabel('y (m)');
cb = colorbar;
cb.Label.String = 'Data value';
daspect([1,1,1]); % Set the axes data aspect ratio
set(gca,'fontsize',FS);

下图是$r_0 = 1hspace{1mm}mathrm{m}, heta_0 = 75^circ$时得到的图像。红点表示最大点的位置。

極座標データを直交座標系に変換して描画する方法【MATLAB】

最大点的位置似乎稍微偏离的原因是由于表面函数的规范。 Surface函数以顶点为单位绘制每个数据,而不是以面为单位,因此略有偏差。网格越细,偏差越小。

执行环境

MATLAB R2022a
使用的工具箱:无


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308632742.html

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 如何在Abaqus的python中调用Matlab程序
    目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误
    03-16
  • 【MATLAB与机械设计】一维优化进退法确定初始区间
    【MATLAB与机械设计】一维优化进退法确定初始区
    在讨论一维搜索时,首先保证搜索区间函数具有单峰性,也就是在区间[a,b]中函数是凸函数,对于求极小值问题,函数值具有高—低—高的特性,在区间[a,b]上有唯一的最小值。1,方法的建立2.进退法确定搜索区间的程序框图3,根据上述的程序框图,编写的MATLAB程序
    03-08
  • 用于微型四轮驱动的 6T 小齿轮原型和使用 MATLAB 的 FEM 结构分析
    用于微型四轮驱动的 6T 小齿轮原型和使用 MATLA
    介绍我使用迷你 4WD 套件使用 Raspberry Pi 制作机器人汽车。定制零件丰富且方便,因为它们在附近的商店很容易买到。但是,由于Mini 4WD的速度非常快,因此在低速时很难控制速度。因此,我使用 3D 打印机制作了自己的 6T 小齿轮,并尝试改变齿轮比。 成型小齿
    03-08
  • ROS与Matlab系列:一个简单的运动控制 基于matl
    转自:http://blog.exbot.net/archives/2594Matlab拥有强大的数据处理、可视化绘图能力以及众多成熟的算法函数,非常适合算法开发;在控制系统设计中,Simulink也是普遍使用的设计和仿真工具。而ROS系统,则是一种新的标准化机器人系统软件框架。通过ROS,你
    02-10
  • matlab 遍历结构体struc的成员
    MATLAB中专门用于对结构数组的操作的函数并不多,通过 help datatypes获取数据类型列表,可以看到其中的结构数据类型的有关的函数,主要如表4.3.1所示。表4.3.1 结构数组的操作函数函数名             功能描述 deal                 把输入处
    02-09
  • 02-09
  • schroeder reverb matlab实现
    schroeder reverb matlab实现
    原理参考:Natural sounding artificial reverberation combFilter.m:function output = combFilter(delay, gain, input)fs = 48000;delaySample = int32(delayTime * fs / 1000);B = [1 zeros(1, delaySample - 1)];A=[1 zeros(1, delaySample - 2) -gain];
    02-09
  • C/C++中调用matlab引擎计算 matlab转c
    原帖地址:http://blog.sina.com.cn/s/blog_6adcb3530101cvot.html一,在linux环境使用matlab引擎必须先进行一些必要的配置1,matlab引擎依赖/bin/csh启动,所以不管你使用何种shell,都必须安装csh。**2,matlab引擎依赖的动态库文件目录必须在系统当前的
    02-09
  • MATLAB 图像放大/缩小,双线性插值
    MATLAB 图像放大/缩小,双线性插值
    半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 1 close all; 2 clear all; 3 clc; 45 m=1.8;%放大或缩小的高度 6 n=2.3;%放大或缩小的宽度 7
    02-09
  • 数据分析处理之PCA OLSR PCR PLSR(NIPALS)及其Matlab代码实现
    数据分析处理之PCA OLSR PCR PLSR(NIPALS)及其M
    传统的OLS(普通最小二乘)方法无法解决样本数据的共线性(multicollinearity)问题,如果你的数据样本中每个特征变量具有共线性,那么使用基于PCA的PCR和PLSR方法对数据样本进行回归建立模型将会是一个不错的选择。PCA是一种数据降维方式,但同时保持了原始数据
    02-09
点击排行