Rotation and Scaling are inexorably linked in a transformation - hence the weirdness... Can I suggest another approach... You are trying to align two objects they both have obj.transformation.axes and you can transform in steps... Therefore you can move the objects together using [ tm=Geom::Transformation.translation(vector_from_point_to_point)] and then rotate one to align with [ tr=Geom::Transformation.rotation(point, axis, angle)] you can 'combine' transformations thus t=tm*tr and then use obj.transform!(t) in one step... but note that the 'order' is important in a matrix * and the order of the transformations it will do is always taken as right-to-left... i.e. the move then the rotation - unlike normal numerical multiplication it's not commutative for matrices! Moving and then rotating will not necessarily give the same result as rotating and then moving - depending on the relativity of points etc... PS: Put your code inside a [ code ]...[ /code ] block as it's easier to read. You are using a $ variable - dangerous as it's exposed to all other tools and such a common name may well clash with other authors' unwrapped code too... Use @ or @@ variables that span methods within your own module/class only... Parenthesize your arguments as method(1, 2, 3) rather than method 1, 2, 3 - although both work upcoming versions of Ruby may well deprecate unparenthesized arguments and even the most recent update caused some problems - I know th API guidance and many example scripts do it the 'wrong way' but it's a good habit to get now, before your code gets out of date unnecessarily...