2014-09-13 173 views
1

我试图让使用MATLAB二维网格X> = -1ÿ< = 1以0.1 步长,但我得到的3D网格没有正确的一步大小。有任何想法吗?绘制2D网格在MATLAB

我的代码:

[x, y] = meshgrid(-1:0.1:5, 0:0.1:1); 
surf(x,y) 
+2

你的问题对我来说并不清楚。你是什​​么意思的2D“网格”?你能举一个“网格”的例子吗? (FYI在matlab中的命令'格'绘制网格线的情节) – bla 2014-09-13 05:36:10

回答

3

你只是想绘制一堆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'); 

这就是我得到:

enter image description here


编辑基于评论

如果要旋转这个网格的角度,你可以使用一个旋转矩阵,并将其与每一对(x,y)坐标相乘。而x',y'是一角度的旋转后的输出坐标

[x'] = [cos(theta) -sin(theta)][x] 
[y'] [sin(theta) cos(theta)][y] 

x,y是原始坐标:如果从线性代数记得,以点逆时针一旋转,则需要执行以下的矩阵乘法theta。如果要旋转-30度(顺时针30度),则只需指定theta = -30 degrees即可。请记住cossin的角度为弧度,所以这实际上是弧度为-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'); 

这就是我得到:

enter image description here

如果你想进行其他转换,如缩放每个轴,你只需乘无论是XY坐标通过适当的规模:

X_scaled = scale_x*X; 
Y_scaled = scale_y*Y; 

X_scaledY_scaled是您的坐标的缩放版本,scale_xscale_y是您想要的每个维度中的比例。如果你想翻译的坐标,您可以添加或通过一些数字中减去每个维度:

X_translate = X + X_shift; %// Or - 
Y_translate = Y + Y_shift; %// Or - 

X_translateY_translate是翻译的坐标,而X_shiftY_shift是转移量,你想要每个维度。请注意,您要么执行+,要么执行-,具体取决于您想要的内容。

+0

谢谢,这是我想:) – James 2014-09-13 05:49:41

+0

@詹姆斯 - 酷!你非常欢迎:) – rayryeng 2014-09-13 05:50:37

+0

你能否给我提出使用这个网格进行空间转换的想法?像旋转-30度? – James 2014-09-13 05:54:19