views:

54

answers:

2

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
Thanks. That's actually what I somewhat did, although could be done more elegantly using the matrices as mentioned.
stanigator
+1 for a good general way of achieving any transformation.
Ramashalanka
+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
+1 for the better solution in matlab specific terms.
Carl Norum
+1 on my end also. Thanks.
stanigator
One more note. How do I retrieve the points from h once I created the mesh and rotate using the Matlab functions?
stanigator
@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

related questions