如何将这个平面调平到 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
想法
尝试绘制基于两个向量并以向量原点为中心的平面
问题
该平面不在 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