class_docstr: Base class for TurntableCamera and ArcballCamera
code: def _update_projection_transform(self, fx, fy):
      d = self.depth_value
      if self._fov == 0:
          self._projection.set_ortho(
              -0.5 * fx, 0.5 * fx, -0.5 * fy, 0.5 * fy, -d, d
          )
          self._actual_distance = self._distance or 0.0
      else:
          # Figure distance to center in order to have correct FoV and fy.
          # Use that auto-distance, or the given distance (if not None).
          fov = max(0.01, self._fov)
          dist = fy / (2 * math.tan(math.radians(fov) / 2))
          self._actual_distance = dist = self._distance or dist
          val = math.sqrt(d * 10)
          self._projection.set_perspective(
              fov, fx / fy, dist / val, dist * val
          )
      # Update camera pos, which will use our calculated _distance to offset
      # the camera
      self._update_camera_pos()
  
imports: from __future__ import division
  import math
  import numpy
  from .base_camera import BaseCamera
  from ...util import keys, transforms
  from ...visuals.transforms import MatrixTransform
label_desc: Use image node_id 7 for calling the Base3DRotationCamera obj's underlying member method code with example usage: obj._update_projection_transform(fx, fy) without return types