If cylinder is aligned with one of the axis then scaling it in the direction of any axis is easy - producing elliptic cylinder. See image bellow - cylinder was scaled along red arrows.
Graphics3D[{{Opacity[0.5], Cylinder[],
Scale[Cylinder[], {2, 1, 1}],}, {Thick, Red, ,
Arrowheads[{-0.05, 0.05}], {Scale[#, 1], Scale[#, 2]} &@
Arrow[{{-1, 0, 1}, {1, 0, 1}}]}}];
Style[%, RenderingOptions -> {"3DRenderingMethod" -> "BSPTree"}]
But for arbitrary oriented cylinder I was not able to figure out how to use Scale
to scale cylinder along red or blue arrows.
I can do it in a cumbersome way - first rotate the cylinder to align it with one of axis, then scale it and then rotate back to its original position but I guess it may be possible using only Scale
without any rotation.
Graphics3D[{{Opacity[0.5],
Cylinder[{{1, 2, 1}, {2, 1, 1}}, 3/2]}, {Thick, Red,
Arrowheads[{-0.05, 0.05}], {Scale[#, 1], Scale[#, 2]} &@
Arrow[{{2, 1, 1} - {1, 1, 1}*Sqrt[3]/2, {2, 1, 1} + {1, 1, 1}*
Sqrt[3]/2}],
Blue, {Scale[#, 1], Scale[#, 2]} &@
Arrow[{{1/8 (16 - 3 Sqrt[2] - 2 Sqrt[3]),
1/8 (8 - 3 Sqrt[2] - 2 Sqrt[3]),
1/4 (4 + 3 Sqrt[2] - Sqrt[3])}, {1/
8 (16 + 3 Sqrt[2] + 2 Sqrt[3]),
1/8 (8 + 3 Sqrt[2] + 2 Sqrt[3]),
1/4 (4 - 3 Sqrt[2] + Sqrt[3])}}]}}]