Rotation that points from A to B

 LSL Portal

f_rotDir()

--BETLOG Hax UTC+10: 20091108 1939 [SLT: 20091108 0239]

You are at vector A and you want to know what rotation (quaternion) will intercept vector B.
Yes it's trivial, but after asking numerous very mathematically intelligent persons, and having them invariably misunderstand what I meant/wanted I feel the need to post it here.
Dude, I say this a lot, but you are seriously awesome.

The code below is merely a test/example harness for something I cannot post here and would only confuse the solution anyway. So yes, it may appear a little redundant. If you are one of the few people who is pleased to learn how this works by finding this example please comment.

```//==============================================================
vector      gTarget;
rotation    gAngle;
//----------------------------------
rotation f_rotDir(vector localAxisToPointWith, vector target, vector origin)
{   return llRotBetween(localAxisToPointWith*ZERO_ROTATION, target-origin);
}
//----------------------------------
default
{   state_entry()
{   llSensor("B", "", AGENT|PASSIVE|SCRIPTED, 3.0, PI);
//        llStopLookAt();
}
touch_start(integer num)
{   if(llDetectedKey(0)==llGetOwner())
{   llSensor("B", "", AGENT|PASSIVE|SCRIPTED, 3.0, PI);
}
}
sensor(integer num)
{   vector p=llGetPos();
gTarget=llDetectedPos(0);
//        gAngle=llRotBetween(<1.0, 0.0, 0.0>* <0,0,0,1>, gTarget-p);
gAngle=f_rotDir(<1.0, 0.0, 0.0>, gTarget, p);
llRotLookAt(gAngle, 0.1, 0.1);
/*
llSetText(""
+"\n gAngle: "+(string)gAngle
+"\n SHOULD equal:"
+"\n llGetRot : "+(string)llGetRot()
, <1.0, 1.0, 1.0>, 1.0);
*/
}
no_sensor()