Simple vector stuff I should know already...

If I’ve got two vectors and instead of Vector2 being relative to the Y Axis I want to turn it so that it is relative to Vector1, how would I go about it? I’m pretty sure there is a really easy way to do that, but I kind of take long breaks from 3d programming and when I come back to it I’ve forgotten how to do everything…

Before I attempt to answer your question, I want to be sure I understand it. Are you saying that Vector1 and Vector2 are expressed in world coordinates and you would like to express Vector2 in a new coordinate system where Vector1 represents the new y-axis?

Mike

Yes, that’s exactly what I mean’t but much more succinctly put…

Find the agngle between Vector1 and Y-axis. Than rotate Vector2 around the axis perpendicular to Vector1 AND Y-axis (cross product / normal) by that angle.

So I’m rotating around the cross product of Vector1 and the Y Axis by the angle between Vector1 and the YAxis?

Ben, Yes. Assuming v1 is in world coordinates, you could do something like this (not tested):


// Figure out angle and axis vector
Vector3f yaxis = new Vector3f(0,1,0);
float angle = v1.angle(yaxis);
Vector3f rotationalAxis = new Vector3f();
rotationalAxis.cross(v1, yaxis);
rotationalAxis.normalize();

//Rotate v2
AxisAngle4f rotation = new AxisAngle4f(rotational, angle);
Transform3D t3d = new Transform3D();
t3d.setRotation(rotation);
t3d.transform(v2);

Could you explain why you would want to do this?

Mike

I’m growing trees and at the moment all my branches are very insistent on folding back towards the trunk the whole time, which doesn’t look very natural (although I notice it happens in some elderly oaks) and I’m currently blaming on the fact that I’m not correctly relating each section of the tree to the previous section. I’m not certain that this is the actual cause of the problem but I need to test this out before I can be certain either way.