## Nonrectangular grid between two lines

### Jan Kappen (view profile)

on 7 May 2015
Latest activity Edited by Matt J

### Matt J (view profile)

on 18 May 2015
Hey guys, this might be a simple problem but I'm going crazy here:
Assume you have two lines or direction vectors r,s from the point p (e.g. the origin):
p = [0 0 0]; r = [2 1 1]; s = [.2 0.1 .5];
Interpreting these vectors span a plane in R^3 (red vector is the normal vector): This works fine with a normal meshgrid. What I really want is to create a grid "between" the r and s axis, and not a rectangular grid between the x and y values.
I can plot points along the vectors, so I have the coordinate for each star or diamond. Let's call them a and b (which are 3d vectors):
rn = r/norm(r); sn = s/norm(s);
a = linspace(p,p+rn,10);
b = linspace(p,p+sn,10);
plot3(a(1,:),a(2,:),a(3,:),'*')
plot3(b(1,:),b(2,:),b(3,:),'d') How can I define a grid between a and b?
PS, this is only for visualization, I know that planes have an infinity spread ;)
Thank you very much! Jan

Matt J

### Matt J (view profile)

on 7 May 2015
I don't really see how you got this to work
a = linspace(p,p+rn,10);
You have vector input arguments, but All input arguments of linspace are supposed to be scalars according to the documentation.
Jan Kappen

### Jan Kappen (view profile)

on 15 May 2015
Hi Matt, you are right. I wrote the script at home with Octave which does support the vector arguments. I didn't know Matlab doesn't.

on 7 May 2015
Edited by Matt J

### Matt J (view profile)

on 18 May 2015

[i,j]=ndgrid(linspace(0,1,10));
xyz = bsxfun(@plus, p, i(:)*r + j(:)*s)
scatter3(xyz(:,1),xyz(:,2),xyz(:,3))

Jan Kappen

### Jan Kappen (view profile)

on 18 May 2015
Thank you! But this is "just" a replacement for the vectorized linspace version above, or did I get something wrong?
Anyways, in the end I realized, that a plane (for which the grid was used) between the two vectors does not look good, so I needed a rectangular plane which is parallel to the vectors, like: Additionally a surf plot didn't look good, too. So I could simply create the meshgrid manually (planeSpread just makes the plane a bit larger):
normal = cross(r,s)/norm(cross(r,s));
d = dot(p,normal);