Как выровнять эту плоскость до z = 0 - PullRequest
0 голосов
/ 05 июля 2019

Идея
Попытка построить плоскость на основе двух векторов с центром в начале векторов

Выпуск
Плоскость не находится в точке z = 0 (поскольку эти векторы находятся в R2, ожидается, что это будет сделано.)

информация
Векторы взяты из введенной матрицы и сохранены в «доблести». Для запуска функции пересечения необходимы векторы размера 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 Ответ

2 голосов
/ 06 июля 2019

Переменная 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
...