I know Matlab has a function called cylinder to create the points for a cylinder when number of points along the circumference, and the radius length. What if I don't want a unit cylinder, and also don't want it to center at the default axis (for example along z-axis)? What would be the easiest approach to create such a cylinder? Thanks in advance.
+4
A:
Multiply the points by your favourite combination of a scaling matrix, a translation matrix, and a rotation matrix.
Carl Norum
2010-03-11 00:00:07
Thanks. That's actually what I somewhat did, although could be done more elegantly using the matrices as mentioned.
stanigator
2010-03-11 00:22:40
+1 for a good general way of achieving any transformation.
Ramashalanka
2010-03-11 01:01:21
+4
A:
The previous answer is fine, but you can get matlab to do more of the work for you (because the results of cylinder
separate x,y,z
components you need to work a little to do the matrix multiplication for the rotation). To have the center of base of the cylinder at [x0 y0 z0]
, scaled by [xf yf xf]
(use xf=yf
unless you want an elliptic cylinder), use:
[x y z] = cylinder;
h=mesh(x*xf+x0,y*yf+y0,z*zf+z0)
If you also want to rotate it so it isn't aligned along the z-axis, use rotate
. For example, to rotate about the x-axis
by 90 degrees, so it's aligned along the y-axis, use:
rotate(h,[1 0 0],90)
Ramashalanka
2010-03-11 00:27:34
One more note. How do I retrieve the points from h once I created the mesh and rotate using the Matlab functions?
stanigator
2010-03-11 09:25:56
@stanigator: `get(h,'XData')`, `get(h,'YData')` and `get(h,'ZData')`. These are in the same form (default `2 x 21`) as the results of `cylinder`.
Ramashalanka
2010-03-11 09:53:09