For anyone who is interested, I think I worked out a solution. Seems to work fairly well. anyway:

Code:

//(moment of inertia) I = kg * m^2
//moment_of_inertia = my.mass * pow(45,2);
//whoops this on is for a point mass
//moment_of_inertia = (2/5) * MR^2;
moment_of_inertia = (2/5) * my.mass* pow(my.diameter/2,2);



//distance_from_centre
vec_diff(distance_from_centre,target,my.x);

//determin which side of the ship that is
vec_rotate(distance_from_centre, my.pan);



//calculate difference in angle
//between direction traveling and direction facing
vec_to_angle(temp2, my.velocity);
vec_diff(temp, temp2, my.pan);




//local veloctiy
local_velocity.x = vec_length(my.velocity);
local_velocity.y = 0;
local_velocity.z = 0;

vec_rotate(local_velocity, temp);



//Force
vec_set(temp, local_velocity);
vec_scale(temp, my.mass);
vec_set(force, temp);



//torque = force * distance_from_centre;

torque.tilt = force.x * distance_from_centre.z
+force.z * distance_from_centre.x;
torque.pan = force.x * distance_from_centre.y
+force.y * distance_from_centre.x;
torque.roll = force.z * distance_from_centre.y
+force.y * distance_from_centre.z;




//rot. a = torque / I, or
//torque = I*(rot. a)

//rot_a = torque/moment_of_inertia

if(moment_of_inertia) //don't divide by zero
{
rot_a.pan = (torque.pan / moment_of_inertia);
rot_a.tilt = (torque.tilt / moment_of_inertia);
rot_a.roll = (torque.roll / moment_of_inertia);
}


//convert from radians to degrees
vec_set(temp,rot_a);
vec_scale(temp, 57.296);
vec_set(angular_momentum_change,temp);



//angular_momentum_change = your_angular_formula * sin(theta)
vec_scale(angular_momentum_change, sin(180 - dot_product));



//phew! Now add that to the ship's angular velocity
ang_add(my.ROT_VELOCITY, angular_momentum_change);