Why does the construct plane component have no "Z" input?

The deconstruct plane component has a z vector output.

The construct plane component has no z vector input.

Why is this? Are all planes in grasshopper and rhino rotations of each other, and never mirror images of each other?

For example, if I wanted to construct a plane from vectors 1,0,0 and 0,1,0 and 0,0,-1 would that be impossible because it’s a mirror of xy, rather than a rotation?

I believe the right hand rule was used when implementing planes. The Z vector is given based upon the other two vectors.

1 Like

Exactly, the normal of a plane - what @Max3 refers to as the local z-axis -, is given by the mathematical cross product of the x- and y-axis, but I believe that the left-hand rule applies in Rhino, simply because the World plane/axis seems to work like that? Although the right-hand rule is more common in math and physics?

Good question! It all depends on whether the left or right hand rule is applied and how consistently. Although you can implement your own system!

My guess would be yes, simply because the cross product would be (0, 0, 1). The same applies to (-1, 0, 0) and (0, -1, 0). If you want a “mirrored” plane where the z-axis is (0, 0, -1), you can for instance get the cross product of the z- (0, 0, -1) and y-axis (0, 1, 0) and you’ll find appropriate x-axis (-1, 0, 0).

In order for a plane to be valid in Rhino, its axes must all have unit length, they must all be perpendicular to each other, and the right-hand-rule must be observed. From this it follows that once you pick an x-axis, the y-axis has fewer degrees of freedom, and the z-axis has no degrees of freedom.


Thanks for the explanation.

I was wondering about it because I had been trying to create a simple cluster that can rotate planes on any or all of their axes, and various 90 degree rotations of XY would usually produce a numerical output, but sometimes (obviously) it would just say “World XZ” or “World YZ”.

Less obviously, sometimes “World ZX” would appear. But I couldn’t get “World YX” to show up, so I tried to, and in doing so apparently tried and failed to create right hand rule violating planes.

But it turns out “World ZX” is not a right hand rule violation. Is what I’m seeing just an idiosyncracy about auto-naming the perpendicular planes? Is “world ZX” the only inversion of one of the three perpenticular planes that gets named in panels, rather than expressed numerically?

I don’t understand that paragraph? And I see no exceptions to this Right Hand Rule:


plane_rotation_2020Aug17a.gh (16.0 KB)

1 Like

What I mean is that I’ve plugged planes into panels and sometimes instead of a numerical output, the panel says “World XY”, “World XZ”, “World YZ”, and also “World ZX”, but I can’t seem to create a plane that will make a panel say “World YX” or “world ZY”

At first I was wondering if there was some kind of the right hand rule reason for this but I realize it’s just an idiosyncracy in Grasshopper: it only inserts those special names for four planes out of the 24 possible orthogonal planes, when for consistency it should insert special names for six out of 24.

This is a ridiculously minor thing, it just confused me for a little while when I was testing a cluster I was making so I could have 3 axis plane rotation use up one box of screen real estate rather than ten boxes. I thought I’d set up my cluster wrong because no combination of orthogonal rotations would produce “World YX” in a panel, but it turns out that’s just how GH works.

World ZX” is very curious indeed! I never noticed that but can see it now using the model I posted.