Как построить плоскость, натянутую на два вектора в Matlab? - PullRequest
0 голосов
/ 04 мая 2019

У меня есть матрица, скажем,

value = [ 1,0,0;0,1,0]

и мне нужно построить плоскость в пространстве, сгенерированном этими векторами, что-то вроде этого: enter image description here
сследующий код

 tt=-0.5:0.1:1.5;
 ss=-0.5:0.1:1.5;
 [s,t]=meshgrid(ss,tt);
 grid on
 mesh(0+(value(1:1)*t)+(value(2:1)*s),0+(value(1:2)*t)+(value(2:2)*s),(0+value(1:3)*t)+(value(2:3)*s))
 view(45, 45);

но все, что я получил, это следующая цифра enter image description here
Matlab отправляет мне сообщение об ошибке в строке команды mesh.

Объяснение инструкции по сетке
Я использовал идею, что плоскости нужны точка и два вектора следующим образом
Точка (0,0,0)
u = 1,0, 0
v = 0,1,0
, поэтому в параметрических уравнениях вы бы получили

w = (x = (0 + t + 0s), y = (0 + 0t + s), z = (0 + 0t + 0s)
, но идея обобщается на любую матрицу размера, поэтому вместо фиксированных значений она выражается через элементы матрицы в части сетки. Я видел паруметодов, но они включают крайности плоскости (которая зависит от векторов, поэтому не всегда известна) и используют что-то вроде патча.

1 Ответ

1 голос
/ 05 мая 2019

Как сказал @ Dev-il, вам просто нужно использовать функцию cross

% Generate vectors
v1 = rand(3,1) - 0.5 ;
v1 = v1 / norm(v1) ;
v2 = rand(3,1) - 0.5 ;
v2 = v2 / norm(v2 ) ;

% Generate point
p = 10*(rand(3,1) - 0.5);

% Start actual code
v3 = cross(v1,v2); % get plane's normal vector

% Points on plane
[ x , y ] = meshgrid( p(1)+(-5:5) , p(2)+(-5:5) );

% Equation for a plane
z = p(3) - (v3(1)*(x-p(1)) + v3(2)*(y-p(2)))/v3(3);

% plot plane
surf(x,y,z)

% plot vectors
hold all
v1Plot = num2cell( [ p , p + v1 ] , 2 );
v2Plot = num2cell( [ p , p + v2 ] , 2 );
v3Plot = num2cell( [ p , p + v3 ] , 2 );
plot3( v1Plot{:}, v2Plot{:}, v3Plot{:} )
hold off

axis equal
...