+(defun close-up (&key focal-length object-distance image-distance magnification (units :feet) &aux bellows-factor)
+ "Computes the parameters for focusing closer than infinity.
+Requires two, and only two, of the input parameters.
+Returns: focal-length object-distance image-distance magnification bellows-factor."
+ (cond
+ ((and focal-length object-distance (not image-distance) (not magnification))
+ (setq magnification (magnification :focal-length focal-length
+ :object-distance object-distance
+ :units units))
+ (setq image-distance (gaussian-lens :focal-length focal-length
+ :object-distance object-distance
+ :units units)))
+ ((and focal-length (not object-distance) image-distance (not magnification))
+ (setq magnification (magnification :focal-length focal-length
+ :image-distance image-distance
+ :units units))
+ (setq object-distance (gaussian-lens :focal-length focal-length
+ :image-distance image-distance
+ :units units)))
+ ((and (not focal-length) object-distance image-distance (not magnification))
+ (setq magnification (magnification :object-distance object-distance
+ :image-distance image-distance
+ :units units))
+ (setq focal-length (gaussian-lens :object-distance object-distance
+ :image-distance image-distance
+ :units units)))
+ ((and focal-length (not object-distance) (not image-distance) magnification)
+ (setq image-distance (image-distance-magnification focal-length magnification))
+ (setq object-distance (gaussian-lens :focal-length focal-length
+ :image-distance image-distance
+ :units units)))
+ ((and (not focal-length) object-distance (not image-distance) magnification)
+ (setq image-distance (* magnification (length->mm object-distance units)))
+ (setq focal-length (gaussian-lens :image-distance image-distance
+ :object-distance object-distance
+ :units units)))
+ ((and (not focal-length) (not object-distance) image-distance magnification)
+ (setq object-distance (mm->length (float (/ image-distance magnification)) units))
+ (setq focal-length (gaussian-lens :image-distance image-distance
+ :object-distance object-distance
+ :units units)))
+ (t
+ (error "Must set two, and only two input parameters: focal-length, image-distance, object-distance, magnifcation.")))
+ (values focal-length object-distance image-distance magnification (1+ magnification)))
+