 # Rotate point around point

Hello,

I want to rotate a point (Vector3f) around another point (Vector3f). The problem is that i don’t want to rotate around the x,y or z-axis but the axis shown in the picture. The axis is defined by the Position of the points. P1, P2 and the angle are known. I want to calculate P1’.
Are there methods i can use to do this?

1 Like

Check out the SceneGraph for Dummies docmentation in the header. The solution is explained in the slides.

You want to put P1 in a node, offset this node to the location of P2 and then rotate the node.

You mean something like this?

Here is the rotation function:

``````rotate_dragon (ang) = {

var p1_z = p2_z

p1.move to (p1_x,p1_y,p1_z) in 0.1 seconds
run rotate_dragon(ang+3) async
}
``````

Above is when you want rotate location only.

If you want rotate it fully. Then do like @remy_vd said, put Node(child) inside Node(parent)

and just rotate Node(parent), see example below:

you can get current angle rotations by:

`rotation = #Node(parent)#quaternion.toAngles(null);`

and then you can adjust specific angle rotation like:

``````            rotation += moveDirection.x;
rotation += moveDirection.y; // use only one of them
rotation += moveDirection.z;
#Node(parent)#quaternion = new Quaternion().fromAngles(rotation);
``````

legend:

#Node(parent)#quaternion -> Node rotation quaternion

1 Like

So , what would happen if :

``````Vector3f axis =new Vector3f(2,3,4);
Obj.rotate(new Quaternion().fromAngleAxis(axis.normalize(),Math.PI));
/*Your point that is rotated */
Vector3f point = Obj.getLocalTranslation();
``````

Actually I havenot yet tried it , I have used predefined values as in wiki UNIT_X , UNIT_Y, UNIT_Z which are actually normalized vectors that are coincident on their corresponding axes , so I think it would be the same

Thanks for the fast answer. But this will not solve my problem because you dont’t change p1_z. So you turn round the z-Axis. The axis i need to turn around depends on the relation of the to points (look at my jpg). So x,y and z of the point have to be changed.

Sorry, i don’t know how this solves my Problem. When i rotate a node i can only rotate it around x, y, or z-axis. But the rotation i need goes around another axis (see jpg).

Hello,

my problem is that i have to calculate the axis i’m rotating the Point around (see jpg)

Thanks for your answer but that doesn’t solve my problem (see jpg).

Hi ,
How do you use points not vectors ?
I cannot understand your question , if you are using

``````Vector2f pointVec=new Vector2f(P1,P2);
``````

You must specify the 2 points of the axis at the same time , the axis is initialized or you will get a NPE

EDIT : if P1 represents a Spatial then just do

``````Vector3f P1 = spatial.getLocalTranslation();

//OR
//In case if you added it to physical space
Vector3f P1=rigidBody.getPhysicsLocation();
``````

Example:
float p1x = (float) random();
float p1y = (float) random();
float p1z = (float) random();
float p2x = (float) random();
float p2y = (float) random();
float p2z = (float) random();
float angle = 0.05f;

``````    Vector3f p1 = new Vector3f(p1x, p1y, p1z);
Vector3f p2 = new Vector3f(p2x, p2y, p2z);

Vector3f p1rotated = new Vector3f();

p1rotated = ???????????????
``````

(Keep in mind: i want to rotate around the axis shown in my jpg)

you said my solution does not work, but you didnt said why.

imo it will work, but you might be missing some information like: