想法
尝试根据两个向量绘制平面,并以向量的原点为中心
问题
平面不在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
期望的结果
平面的原点必须与向量的原点相同
答案 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