/** * Convert AxisAngle representation to rotation matrix and store as * rotational component of this transform. * * @param axisAngle */ public void setRotation(AxisAngle4f axisAngle) { setRotationWithAxisAngle(axisAngle.getX(), axisAngle.getY(), axisAngle.getZ(), axisAngle.getAngle()); }
/** * Return rotation in AxisAngle form. * * @param axisAngle */ public void getRotation(AxisAngle4f axisAngle) { axisAngle.setX((float) (mat21 - mat12)); axisAngle.setY((float) (mat02 - mat20)); axisAngle.setZ((float) (mat10 - mat01)); double mag = axisAngle.getX() * axisAngle.getX() + axisAngle.getY() * axisAngle.getY() + axisAngle.getZ() * axisAngle.getZ(); if (mag > 1.0e-12) { mag = Math.sqrt(mag); double sin = 0.5 * mag; double cos = 0.5 * (mat00 + mat11 + mat22 - 1.0); axisAngle.setAngle((float) Math.atan2(sin, cos)); double invMag = 1.0 / mag; axisAngle.setX((float) (axisAngle.getX() * invMag)); axisAngle.setY((float) (axisAngle.getY() * invMag)); axisAngle.setZ((float) (axisAngle.getZ() * invMag)); } else { axisAngle.setX((float) 0.0); axisAngle.setY((float) 1.0); axisAngle.setZ((float) 0.0); axisAngle.setAngle((float) 0.0); } }
axisAngle.setY((float) (rot02 - rot20)); axisAngle.setZ((float) (rot10 - rot01)); double mag = axisAngle.getX() * axisAngle.getX() + axisAngle.getY() * axisAngle.getY() + axisAngle.getZ() * axisAngle.getZ(); axisAngle.setY((float) (axisAngle.getY() * invMag)); axisAngle.setZ((float) (axisAngle.getZ() * invMag));