2014-09-13 157 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