如何将此平面调至z = 0

时间:2019-07-05 18:53:04

标签: matlab matlab-figure linear-algebra

想法
尝试根据两个向量绘制平面,并以向量的原点为中心

问题
平面不在z = 0处(因为这些向量在R2中,因此有望这样做)。

详细信息
向量取自输入矩阵并存储在“ valor”中。要运行交叉函数,需要大小为3的向量,但是valor的大小为2,因此将创建另一个称为valor1的矩阵来对此进行调整。

代码

   figure(1);
   valor1 =[ valor(1,1) valor(1,2) 0; valor(2,1) valor(2,2) 0;0 0 0]; #adjusted matrix to run cross
    v1 = valor1(:,1);
    v1 = v1 / norm(v1) ; #normalized vectors
    v2 = valor1(:,2);
    v2 = v2 / norm(v2 ) ;
    p = 10*(rand(3,1) - 0.5);  #points of the plane
    v3 = cross(v1,v2);   #cross product
    [ x , y ] = meshgrid( p(1)+(-5:5) , p(2)+(-5:5) ); #the limits of the plane
    z = p(3) - (v3(1)*(x-p(1)) + v3(2)*(y-p(2)))/v3(3); #plane equation
    surf(x,y,z) #graph it all
    hold all
    z = zeros(size(valor, 1), 1); 
    quiver3(z, z, z, valor(:, 1), valor(:, 2), z, 0); #plot the vectors entered
    hold off
    axis equal

获得示例
enter image description here

期望的结果
平面的原点必须与向量的原点相同

enter image description here

1 个答案:

答案 0 :(得分:2)

变量p在平面上定义一个点。但是,由于p是使用p = 10*(rand(3,1) - 0.5);随机生成的,因此通常来说,该点的z坐标不为0(如@JAC所指出的那样)。

我不清楚您为什么要随机生成一个点(然后减去0.5),而不是简单地设置p = [0 0 0],但是假设您有充分的理由这样做,只需将p(3)强制为0,如下面的改编代码所示。

figure(1);
valor1 =[ valor(1,1) valor(1,2) 0; valor(2,1) valor(2,2) 0;0 0 0]; %adjusted matrix to run cross
v1 = valor1(:,1);
v1 = v1 / norm(v1) ; %normalized vectors
v2 = valor1(:,2);
v2 = v2 / norm(v2 ) ;
p = [10*(rand(2,1) - 0.5); 0];  %point on the plane with z=0
v3 = cross(v1,v2);   %cross product
[ x , y ] = meshgrid( p(1)+(-5:5) , p(2)+(-5:5) ); %the limits of the plane
z = p(3) - (v3(1)*(x-p(1)) + v3(2)*(y-p(2)))/v3(3); %plane equation
surf(x,y,z) %graph it all
hold all
z = zeros(size(valor, 1), 1); 
quiver3(z, z, z, valor(:, 1), valor(:, 2), z, 0); %plot the vectors entered
hold off
axis equal