如何将这个平面调平到 z=0

How to level this plane to z=0

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

问题
该平面不在 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

得到的例子

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

变量p定义了平面上的一个点。但是,因为 p 是使用 p = 10*(rand(3,1) - 0.5); 随机生成的,所以一般来说那个点的 z-coordinate 不是 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