rem: axis = a.dup(); 
add: var axis = a.dup(); 
context: Matrix.Rotation = function(t, a) {  if (!a) {    return Matrix.create([      [Math.cos(t),  -Math.sin(t)],      [Math.sin(t),   Math.cos(t)]    ]);  }  axis = a.dup();  if (axis.dimensions() != 3) { return null; }  axis = axis.toUnitVector();  var rot = Matrix.RotationZ(t);  // Axis is parallel to z-axis - just return that rotation  if (axis.isParallelTo(Vector.k)) { return rot; }  var projectionOnXY = Vector.create([axis.e(1), axis.e(2), 0]);  var z_rot = Matrix.I(3), inv_z_rot = Matrix.I(3);  if (!projectionOnXY.isParallelTo(Vector.i)) {    // Axis does not lie in X-Z plane - change co-ordinates through R(Z)    var Za = projectionOnXY.cross(Vector.i).toUnitVector();    var Zt = Za.e(3) * projectionOnXY.angleFrom(Vector.i);    axis = Matrix.RotationZ(Zt).x(axis);    z_rot = Matrix.RotationZ(Zt);    inv_z_rot = Matrix.RotationZ(-Zt);  }  // Axis lies in X-Z plame - change co-ordinates so that axis = z-axis, through R(Y)  var Ya = axis.cross(Vector.k).toUnitVector();  var Yt = Ya.e(2) * axis.angleFrom(Vector.k);  var y_rot = Matrix.RotationY(Yt);  var inv_y_rot = Matrix.RotationY(-Yt);  return inv_z_rot.x(inv_y_rot).x(rot).x(y_rot).x(z_rot);};
meta: 3877	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/3877/453121b7e6d7b1cb29a79bd5754f0a25aa8f5948/sylvester.src.js/clean/sylvester.src.js