# smooth ang-velocity-based rotation to target 6dof / "AI

Hi,

these 3D maths are driving me nuts I have my angular velocity code ready in the plane (see atlas.uni-wuppertal.de/~muenchen/rottest.tgz - press ‘m’ to set a new target in the plane), plus/minus numerical stability issues… but as soon as the target (the AI should rotate to face) is not in the same plane, weird things happen

What I want to ultimatively achieve is that, given a new target, the AI should use its angular acceleration to turn to the target, and smoothly “brake” the rotation when facing it (see my code, I start to “brake” when the angle to the target is less than 20 degrees…), while using the shortest possible rotation direction.

Because I want to do/calc other stuff based on this rotation, I cannot just use an Interval (I guess). So it’s just about fixing my vector/quaternion maths, I’m afraid grin

Has someone got a clue for me?

okay, some next steps I did:

replace the “brake function” with:

``````    def brakeFunc(self, x):
if x < 0.0:
return 1.0
elif x > 1.0:
return 0.0
else:
return 1.0 - (x*x*x*x)``````

and I don’t need a quat and the “look at magic” to get my axis and angle (duh!), just use

``````        pd = self.dest - p
pd.normalize()
axis = v.cross(pd)