public void RotateAroundUpPosition(Vector3 radians)
{
var matrix = Matrix3.LookAt((LookAtPosition - Position), (UpPosition - Position));
var matrixTranspose = matrix.Transpose();
matrix = matrix.RotateAroundAxisX(radians.X);
matrix = matrix.RotateAroundAxisY(radians.Y);
matrix = matrix.RotateAroundAxisZ(radians.Z);
LookAtPosition -= UpPosition;
LookAtPosition = LookAtPosition.Transform(matrixTranspose);
LookAtPosition = LookAtPosition.Transform(matrix);
LookAtPosition += UpPosition;
Position -= UpPosition;
Position = Position.Transform(matrixTranspose);
Position = Position.Transform(matrix);
Position += UpPosition;
}