Matlab 中二维极坐标图的旋转
Revolution of a 2D polar plot in Matlab
我想围绕 0° 方向轴执行以下 2D 极坐标图的 360° 旋转:
我没有描述它的分析函数(例如 f = R(theta)),但只有两个离散数组:半径值和角度 theta
设 R 为包含极坐标图半径值的向量:
xv = R.* cos(theta); % // Polar to 2D Cartesian coordinates
yv = R.* sin(theta); % // Polar to 2D Cartesian coordinates
phi = 0:.001:2*pi; % // 3D revolution angle around theta = 0
% // 3D points of the surface
xf = repmat(xv',size(phi));
yf = yv' * cos(phi);
zf = yv' * sin(phi);
mesh(xf,yf,zf)
上面的代码绘制了这个:
似乎是正确的,但是:
- zf 值(参见颜色条)与我对极坐标图的简单 360° 旋转所期望的范围不同。那是因为zf是坐标变换的结果
- 颜色图算法的工作方式,它根据距原点 zf 的大小分配颜色。这意味着表面的着色方式现在与 zf 的实际大小无关。例如,二维极坐标图中没有负值,而旋转显然会生成相对于参考系原点具有负坐标的点。
这应该是一个简单的操作,但我莫名其妙地卡住了...
感谢您对此的任何见解!
mesh
命令接受 another argument to define colors:一种方法是为每个顶点定义颜色,在您的情况下,您仍然可以通过使用半径 R
作为颜色:
mesh(xf,yf,zf, repmat(R', size(phi)))
我想围绕 0° 方向轴执行以下 2D 极坐标图的 360° 旋转:
设 R 为包含极坐标图半径值的向量:
xv = R.* cos(theta); % // Polar to 2D Cartesian coordinates
yv = R.* sin(theta); % // Polar to 2D Cartesian coordinates
phi = 0:.001:2*pi; % // 3D revolution angle around theta = 0
% // 3D points of the surface
xf = repmat(xv',size(phi));
yf = yv' * cos(phi);
zf = yv' * sin(phi);
mesh(xf,yf,zf)
上面的代码绘制了这个:
似乎是正确的,但是:
- zf 值(参见颜色条)与我对极坐标图的简单 360° 旋转所期望的范围不同。那是因为zf是坐标变换的结果
- 颜色图算法的工作方式,它根据距原点 zf 的大小分配颜色。这意味着表面的着色方式现在与 zf 的实际大小无关。例如,二维极坐标图中没有负值,而旋转显然会生成相对于参考系原点具有负坐标的点。
这应该是一个简单的操作,但我莫名其妙地卡住了...
感谢您对此的任何见解!
mesh
命令接受 another argument to define colors:一种方法是为每个顶点定义颜色,在您的情况下,您仍然可以通过使用半径 R
作为颜色:
mesh(xf,yf,zf, repmat(R', size(phi)))