我試圖讓使用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