在matlab中绘制二维网格

在matlab中绘制二维网格,matlab,plot,Matlab,Plot,我正在尝试使用matlab获得一个二维网格,其中x>=-1和y您是否只想绘制一组二维点?你用。使用您的示例,您可以取x,y点,并简单地为每个点放置点标记。执行此操作之前,请先将其转换为1D阵列: [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'); 这就是我得到的: 根据评论进行编辑 如果要将

我正在尝试使用matlab获得一个二维网格,其中x>=-1和y您是否只想绘制一组二维点?你用。使用您的示例,您可以取
x,y
点,并简单地为每个点放置点标记。执行此操作之前,请先将其转换为1D阵列:

[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'] = [cos(theta) -sin(theta)][x]
[y']   [sin(theta)  cos(theta)][y]
x,y
是原始坐标,
x',y'
是旋转角度
theta
后的输出坐标。如果要旋转-30度(即顺时针旋转30度),只需指定
theta=-30度
。请记住,
cos
sin
的角度为弧度,因此这实际上是
-pi/6
弧度。您需要做的是将每个点放置到二维矩阵中。然后使用旋转矩阵并将其应用于每个点。通过这种方式,您将解决方案矢量化,而不是。。。说。。。对循环使用
。因此,您可以这样做:

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
是每个维度需要的移位量。请注意,您可以选择
+
-
,这取决于您想要什么。

我不清楚您的问题。你所说的二维“网格”是什么意思?你能举一个“网格”的例子吗?(供参考,在matlab中,命令
grid
在绘图上绘制网格线)谢谢,这是我想要的:)您能给我一些使用该网格执行空间变换的想法吗?就像执行-30度旋转一样?@James-是的,对于网格中的每个点,您应该只对该网格应用旋转矩阵。我会更新我的帖子。你太棒了!我从你的回答中学到了很多东西。
X_translate = X + X_shift; %// Or -
Y_translate = Y + Y_shift; %// Or -