如何在matlab中绘制由两个向量跨越的平面?
how to plot a plane spanned by two vectors in matlab?
我有一个矩阵,比方说
value = [ 1,0,0;0,1,0]
并且需要在这些向量生成的 space 中绘制一个平面,如下所示:
使用下一个代码
tt=-0.5:0.1:1.5;
ss=-0.5:0.1:1.5;
[s,t]=meshgrid(ss,tt);
grid on
mesh(0+(value(1:1)*t)+(value(2:1)*s),0+(value(1:2)*t)+(value(2:2)*s),(0+value(1:3)*t)+(value(2:3)*s))
view(45, 45);
但我得到的只是下一个数字
Matlab 在 mesh 命令行中向我发送错误。
网格指令解释
我使用了一个平面需要一个点和两个向量的想法在接下来的方式
点 (0,0,0)
你=1,0,0
v=0,1,0
所以在参数方程中你会有
w=(x=(0+t+0s),y=(0+0t+s),z=(0+0t+0s)
但是这个想法是推广到任何大小的矩阵,所以它不是固定值,而是用网格部分的矩阵元素来表示。
我见过几种方法,但这些方法涉及平面的极端(这取决于向量,所以并不总是为人所知)并使用像补丁这样的东西。
正如@Dev-il 所说,您只需要使用 cross
函数
% Generate vectors
v1 = rand(3,1) - 0.5 ;
v1 = v1 / norm(v1) ;
v2 = rand(3,1) - 0.5 ;
v2 = v2 / norm(v2 ) ;
% Generate point
p = 10*(rand(3,1) - 0.5);
% Start actual code
v3 = cross(v1,v2); % get plane's normal vector
% Points on plane
[ x , y ] = meshgrid( p(1)+(-5:5) , p(2)+(-5:5) );
% Equation for a plane
z = p(3) - (v3(1)*(x-p(1)) + v3(2)*(y-p(2)))/v3(3);
% plot plane
surf(x,y,z)
% plot vectors
hold all
v1Plot = num2cell( [ p , p + v1 ] , 2 );
v2Plot = num2cell( [ p , p + v2 ] , 2 );
v3Plot = num2cell( [ p , p + v3 ] , 2 );
plot3( v1Plot{:}, v2Plot{:}, v3Plot{:} )
hold off
axis equal
我有一个矩阵,比方说
value = [ 1,0,0;0,1,0]
并且需要在这些向量生成的 space 中绘制一个平面,如下所示:
使用下一个代码
tt=-0.5:0.1:1.5;
ss=-0.5:0.1:1.5;
[s,t]=meshgrid(ss,tt);
grid on
mesh(0+(value(1:1)*t)+(value(2:1)*s),0+(value(1:2)*t)+(value(2:2)*s),(0+value(1:3)*t)+(value(2:3)*s))
view(45, 45);
但我得到的只是下一个数字
Matlab 在 mesh 命令行中向我发送错误。
网格指令解释
我使用了一个平面需要一个点和两个向量的想法在接下来的方式
点 (0,0,0)
你=1,0,0
v=0,1,0
所以在参数方程中你会有
w=(x=(0+t+0s),y=(0+0t+s),z=(0+0t+0s)
但是这个想法是推广到任何大小的矩阵,所以它不是固定值,而是用网格部分的矩阵元素来表示。
我见过几种方法,但这些方法涉及平面的极端(这取决于向量,所以并不总是为人所知)并使用像补丁这样的东西。
正如@Dev-il 所说,您只需要使用 cross
函数
% Generate vectors
v1 = rand(3,1) - 0.5 ;
v1 = v1 / norm(v1) ;
v2 = rand(3,1) - 0.5 ;
v2 = v2 / norm(v2 ) ;
% Generate point
p = 10*(rand(3,1) - 0.5);
% Start actual code
v3 = cross(v1,v2); % get plane's normal vector
% Points on plane
[ x , y ] = meshgrid( p(1)+(-5:5) , p(2)+(-5:5) );
% Equation for a plane
z = p(3) - (v3(1)*(x-p(1)) + v3(2)*(y-p(2)))/v3(3);
% plot plane
surf(x,y,z)
% plot vectors
hold all
v1Plot = num2cell( [ p , p + v1 ] , 2 );
v2Plot = num2cell( [ p , p + v2 ] , 2 );
v3Plot = num2cell( [ p , p + v3 ] , 2 );
plot3( v1Plot{:}, v2Plot{:}, v3Plot{:} )
hold off
axis equal