# Steering mechanism

Important: The following is based on two plains; x & y - therefore z is always 0.

Given a target vector, and the following available variables for an (Node) object in space (NB: theres no need to use them all):

1. a velocity vector,
2. an angle of direction (current heading) as a float,
3. a local translation vector
4. a rotation magnitude float (defines how fast the object may rotate)

How can I alter the local rotation, in accordance with the rotation magnitude, so that the object begins to rotate towards the target vector. (And stop once it is pointing towards it).

I will be monitoring the node with a controller which does the following during its update method.

``` public void update(float time) {        Vector3f prey = target.getWorldTranslation();    Vector3f predator = missile.getWorldTranslation();              if(!predator.equals(prey)) {              u.set(prey);       u.subtractLocal(predator).normalizeLocal();              uv.set(u);       uv.multLocal(missile.getVelocity());              vr.set(target.getVelocity());       vr.subtractLocal(u.mult(missile.getVelocity()));              sr.set(prey);       sr.subtractLocal(predator);              float tc = sr.length() / vr.length();              tv.set(target.getVelocity());       tv.multLocal(tc);              st.set(prey);       st.addLocal(tv);              // st now represents the target location vector to move the missile towards       // insert code to alter rotation of missile    } } ```

The code was edited from an AI article in the wiki for steering behaviours to remove creating any Vector3f object.

``` public class Missile extends Node {    private Vector3f velocity;    private float degreeOfRotation;    private float headingAngle;    public Missile(float degreeOfRotation, float headingAngle) {       this.degreeOfRotation = degreeOfRotation;       this.headingAngle = headingAngle;       getLocalRotation().fromAngleAxis(FastMath.DEG_TO_RAD * headingAngle, Vector3f.UNIT_Z);    }    public Vector3f getVeocity() {       return velocity;    }    public float getHeadingAngle() {       return headingAngle;    }    public float getDegreeOfRotation() {       return degreeOfRotation;    } } ```

Thanks!