How to measure compound angles


I’m new to Rhino, and I can’t figure out how to measure compound angles. I have a surface that I’ve rotated in all 3 dimensions myriad times, and finally got the angle I want. But after rotating it so many times I have no idea the exact angles I moved it from the original orthogonal position. I’ve measured the simple angle deviation of the surface from each of the three standard planes, but when I create a new surface and rotate it at those three measured angles the surface is not oriented the same as the original surface. Using the ‘analyse -> angle’ command I’ve tried measuring the angle of the whole surface from the 3 planes, and also used the ‘curve from object’ command to create three intersection curves of the surface with each of the 3 planes. But each time I try to recreate the compound angle I fail to get the same outcome as the original surface.

I’m desperate to figure this out so any assistance would be immensely appreciated!

Hi Stuart - can you post the file with some indication of the original orientation?


Hi Pascal,

I’ve uploaded the pertinent section of my model, with layers named appropriately. I had to re-create the ‘original surface rotation’ as a new object, because I didn’t save the original position of the object. So the actual position of the ‘original object’ might be slightly off, but its rotational values should be perfectly accurate as it is sitting exactly parallel to the XZ plane.

ExportForPascal.3dm (68.5 KB)

Hello - if the goal is to be able to apply the same transformation to other objects, probably the best is to make a block from the object at its starting orientation, then monkey with it till it looks right - the block instance carries the transformation matrix and you can get at this in a script and apply it to other objects or reverse it to put the thing back etc. It does not, in itself, tell you the angles but that might not be critical depending on the goal, and these can, I think, be extracted from the transform matrix if need be.


I’m trying to write a patent by myself as I cannot afford a patent attorney, so I’m trying to describe the object’s position textually, as relative to its original position. I thought this might be relatively straightforward using 3D software such as Rhino.

If I follow your advice, how can I then access the transformation matrix from the block to extract the angles?

Hello - if all you are doing is rotating on the world origin, you can get the transformation matrix from the result ,if you make it a block and put the insertion point at the world origin, by running the What command - the matrix results can be plugged in here, for instance:

and the xyz angles will turn up on the right. Make sure to set the input angles to radians and the output to degrees, assuming you want degrees. I think the numbers you want are the lower right : “Euler angles (degrees)”

I’m somewhat on thin ice here but if the only thing you’ve done is rotate in the three ‘main’ planes, you can use the nine numbers from this bit of the matrix:


I think.


P.S. just pointing out that there are intrinsic and extrinsic kinds of Euler angles, corresponding to how Rhino gumballs work if you set them to “Align to Object” and “Align to World” respectively.

(animation of Z-X-Z intrinsic rotation from Wikipedia)

The website above doesn’t specify which it uses, but I imagine patent language must be quite precise… Furthermore, the order in which you perform the rotations is important, and there are multiple possible sets of angles that correspond to the same rotation.

The Axis-Angle form is probably more intuitive to explain and unambiguous - you construct an axis line from the origin to the specified {x, y, z} coordinates and perform a single Rotate3D around that line by a certain angle (according to the right-hand rule).