我试图让使用MATLAB二维网格X> = -1和ÿ< = 1以0.1 步长,但我得到的3D网格没有正确的一步大小。有任何想法吗?绘制2D网格在MATLAB
我的代码:
[x, y] = meshgrid(-1:0.1:5, 0:0.1:1);
surf(x,y)
我试图让使用MATLAB二维网格X> = -1和ÿ< = 1以0.1 步长,但我得到的3D网格没有正确的一步大小。有任何想法吗?绘制2D网格在MATLAB
我的代码:
[x, y] = meshgrid(-1:0.1:5, 0:0.1:1);
surf(x,y)
你只是想绘制一堆2D点的?您使用plot
。使用你的例子,你可以拿你的x,y
分,并简单地为每个点放点标记。将它们转换成一维数组,你先做在此之前:
[X,Y] = meshgrid(-1:0.1:5, 0:0.1:1);
X = X(:);
Y = Y(:);
plot(X,Y,'b.');
xlabel('X'); % // Label the X and Y axes
ylabel('Y');
这就是我得到:
如果要旋转这个网格的角度,你可以使用一个旋转矩阵,并将其与每一对(x,y)
坐标相乘。而x',y'
是一角度的旋转后的输出坐标
[x'] = [cos(theta) -sin(theta)][x]
[y'] [sin(theta) cos(theta)][y]
x,y
是原始坐标:如果从线性代数记得,以点逆时针一旋转,则需要执行以下的矩阵乘法theta
。如果要旋转-30度(顺时针30度),则只需指定theta = -30 degrees
即可。请记住cos
和sin
的角度为弧度,所以这实际上是弧度为-pi/6
。你需要做的是将你的每个点放入一个二维矩阵。然后,您将使用旋转矩阵并将其应用于每个点。这样,您就可以使用for
循环向量化解决方案,而不是......说......。因此,你可以这样做:
theta = -pi/6; % // Define rotation angle
rot = [cos(theta) -sin(theta); sin(theta) cos(theta)]; %// Define rotation matrix
rotate_val = rot*[X Y].'; %// Rotate each of the points
X_rotate = rotate_val(1,:); %// Separate each rotated dimension
Y_rotate = rotate_val(2,:);
plot(X_rotate, Y_rotate, 'b.'); %// Show the plot
xlabel('X');
ylabel('Y');
这就是我得到:
如果你想进行其他转换,如缩放每个轴,你只需乘无论是X
或Y
坐标通过适当的规模:
X_scaled = scale_x*X;
Y_scaled = scale_y*Y;
X_scaled
和Y_scaled
是您的坐标的缩放版本,scale_x
和scale_y
是您想要的每个维度中的比例。如果你想翻译的坐标,您可以添加或通过一些数字中减去每个维度:
X_translate = X + X_shift; %// Or -
Y_translate = Y + Y_shift; %// Or -
X_translate
和Y_translate
是翻译的坐标,而X_shift
和Y_shift
是转移量,你想要每个维度。请注意,您要么执行+
,要么执行-
,具体取决于您想要的内容。
你的问题对我来说并不清楚。你是什么意思的2D“网格”?你能举一个“网格”的例子吗? (FYI在matlab中的命令'格'绘制网格线的情节) – bla 2014-09-13 05:36:10