Idea
Im trying to plot a plane delimited by two vectors, using cross in matlab
Code
NM= [1 3; 2 4] //matrix
figure
hold on;
z = zeros(size(NM, 1), 1); //to use quiver3
quiver3(z, z, z, NM(:,1), NM(:,2), z, 0); //vectors plotted
grid on
view(45, 45);
s=sum(NM);
p = 10*(rand(3,1) - 0.5); // generation of points
O1=[NM(1,:) 0] // new vectors of length 3 ,
O2=[NM(2,:) 0] // to be used by cross
v3 = cross(O1,O2) //cross product to find the norm
[ x , y ] = meshgrid( p(1)+(-5:5) , p(2)+(-5:5) ); // points inside the plane
z = p(3) - (v3(1)*(x-p(1)) + v3(2)*(y-p(2)))/v3(3); // plane equation
surf(x,y,z) //the plane itself
Issue
The plane must be delimited by the vectors or the vectors must be inside the plane not outside.
The vectors do not appear inside the plane because you are choosing (0,0,0)
as the starting point of the vectors while you are making the plane pass by the randomly chosen point p
.
You either make the plane pass by (0,0,0)
or use p
as the starting point for the vectors when plotted with quiver3()
.
Here is a solution where I have chosen the second option:
vplane = [1 3 0; 2 4 0]'; % (column) vectors defining the plane
vnormal = cross(vplane(:,1), vplane(:,2)); % normal defining the orientation of the plane
figure; hold on; grid on; view(45, 45);
rng(1313) % seed for reproducible output
p = 10*(rand(3,1) - 0.5); % a point defining the position of the plane we want to plot with the given normal vector
P = repmat(p, 1, 2); % matrix with the given point repeated for easier use of quiver3()
quiver3(P(1,:), P(2,:), P(3,:), vplane(1,:), vplane(2,:), vplane(3,:), 0); % arrows representing the vectors defining the plane
[x,y] = meshgrid( p(1)+(-5:5), p(2)+(-5:5) ); % set of equally spaced points inside the plane
z = p(3) - (vnormal(1)*(x-p(1)) + vnormal(2)*(y-p(2))) / vnormal(3); % plane equation
surf(x,y,z) % plot the plane