description about the 3D vector rotation.

1. angle y3-y4-normal and w1-y4-normal as always 90 degree.
2. angle y3-y4-w1 as rad_y3y4w1, changeable.
3. link d3-y4-d4 is unchangeable or immovable.
4. location of y4a as y4. but rotation is different. because y4a to
always point towards Target w1.
5. o4a is child of y4a. location of o4a, o4 are different.

demo_0 (line 308-325)
    // two target vectors :: a-> is y4y3, b-> is y4o4
    var a = new THREE.Vector3((y3.x-y4.x), (y3.y-y4.y), (y3.z-y4.z));
    var b = new THREE.Vector3((w1.x-y4.x), (w1.y-y4.y), (w1.z-y4.z));

    // start of the inner product
    // calculation of the angle of rotation y3y4w1
    // by ourselves (for analysis)
    var rad_y3y4w1 = Math.acos( (a.x*b.x + a.y*b.y + a.z*b.z) /
(Math.sqrt( Math.pow(a.x,2) + Math.pow(a.y,2) + Math.pow(a.z,2) ) *
Math.sqrt( Math.pow(b.x,2) + Math.pow(b.y,2) + Math.pow(b.z,2) )) );
    // by three.js library (this is the same result as the calculation
above.)
    // var rad_y3y4w1 = Math.acos(a.dot(b)); // / (up.length() *
normalAxis.length());

    // start of the cross vectors (the calculation of the normal vector
or axis of rotation)
    // calculation by ourselves (for analysis)
    var nor_y3y4w1 = new THREE.Vector3((a.y*b.z - b.y*a.z), (a.z*b.x -
b.z*a.x), (a.x*b.y - b.x*a.y)).normalize();
    // by three.js library (this is the same result as the calculation
above.)
    // var nor_y3y4w1 = new THREE.Vector3().crossVectors(a,
b).normalize();

    var q = new THREE.Quaternion().setFromAxisAngle(nor_y3y4w1,
rad_y3y4w1);
    meshs.y4.rotation.setFromQuaternion(q);