code: private void addRodriguesJacobian( DMatrixRMaj Rj , Point3D_F64 worldPt , Point3D_F64 cameraPt )
  	{
  		// (1/z)*dot(R)*X
  		double Rx = (Rj.data[0]*worldPt.x + Rj.data[1]*worldPt.y + Rj.data[2]*worldPt.z)/cameraPt.z;
  		double Ry = (Rj.data[3]*worldPt.x + Rj.data[4]*worldPt.y + Rj.data[5]*worldPt.z)/cameraPt.z;
  
  		// dot(z)/(z^2)
  		double zDot_div_z2 = (Rj.data[6]*worldPt.x + Rj.data[7]*worldPt.y + Rj.data[8]*worldPt.z)/
  				(cameraPt.z*cameraPt.z);
  
  		output[indexX++] = -zDot_div_z2*cameraPt.x + Rx;
  		output[indexY++] = -zDot_div_z2*cameraPt.y + Ry;
  	}
docs: Adds to the Jacobian matrix using the derivative from a Rodrigues parameter.
  
  deriv [x,y] = -dot(z)/(z^2)*(R*X+T) + (1/z)*dot(R)*X
  
  where R is rotation matrix, T is translation, z = z-coordinate of point in camera frame
  
  @param Rj Jacobian for Rodrigues
  @param worldPt Location of point in world coordinates
  @param cameraPt Location of point in camera coordinates