# Calculate 3d Rotation Maintaining Orientation

My Current Setup:

Let's assume we have these 3 axes in 3d space.

Let's also assume that x = blue; y = red; green = z;

To calculate a rotation on the x axis, i.e., from point A->E, we can calculate that by doing

p1 = A
p2 = Origin (Gray)
p3 = E


This would also work for A->C, however, to get the circular behavior we want, we need to do

All of this works great :)

Now for,

The Problem:

So far, I have my X-Axis Rotation down perfectly. I am looking to rotate the Y and Z axis in such a manner that I NEVER rotate the INITIAL Z axis.

Let's say I have 2 objects, object O and object P as noted on the picture. The goal is that as O translates and rotates, that P will only rotate to face O. However, we do NOT want the orientation of P to follow the orientation of O.

Test Cases:

Assume all rotations occur from Origin, so if we rotate O, then it moves. If we rotate P, it just turns.

Let's start O at position A and P at position Origin. If we orient (rotate about Z) by 90 degrees, we do NOT want P to move.

O Rotation (0, 0, 90) -- P Rotation (0, 0, 0)

Let's now rotate O from position A->E.

O Rotation (-90, 0, 0) -- P Rotation (-90, 0, 0)

Now, let's go from E-> B. This is a rotation about the Z axis, but we DO want to move, because if we rotate the orientation of O, it is not the Y axis that we do NOT want to rotate.

O Rotation (-90, 0, 90) -- P Rotation (-90, 0, 90)

Now let's get back to point A by reversing the rotations.

O Rotation (0, 0, 0) -- P Rotation (0, 0, 0)

Now let's rotate A->B but also rotate O 90 degrees about Z. Because the rotation orientation is now back to the Z axis, we do NOT want P to rotate about the Z. So we have

O Rotation (0, 90, 90) -- P Rotation (0, 90, 0).

Let's go back to point A

O Rotation (0, 0, 0) -- P Rotation (0, 0, 0)

Now, let's go 45 degrees from A->E so we have

O Rotation (45, 0, 0) -- P Rotation (45, 0, 0)

Now rotate from currentPosition->B. This rotation requires that part of Z and part of Y are both part of orientation. It is half. So, we don't rotate both Y or Z by 90 degrees, we rotate each by 45 degrees, since it X rotation is in between Y and Z axis.

O Rotation (45, 45, 45) -- P Rotation (45, 45, 45)

Final Problem:

So, I am in search of a formula to help me keep the "Initial Z Axis" locked, such that the orientation of P never changes at any rotation of X, Y, Z. You can see that I cannot just lock the Z axis for orientation, as at 90 and 270 degrees, the Z axis then becomes the Y axis, in terms of orientation. Any help in creating a formula as to rotate object O and P such that P rotates to follow O, however, if O rotates about orientation (spin), that P does not follow.

Edit1:

I have come up with the ratio of how much y (yRatio) and how much z (zRatio) according to the current xAngleInRadians. I'm just not sure what to do with these variables. I just know how much of Z and how much of Y we WANT to rotate. If O is at A, then we want 0(zero) Z rotation. If O is at E, then we want 0(zero) Y rotation. However, if O is 45 degrees between A and E, then we want 1/2 rotation for Y and Z.

(ZRatio, YRatio) for picture sake.