r10530: fix argument list
[cl-photo.git] / fov.lisp
index 211820af13e616d9d5b83818b908f84e47eb8a15..fba5ce9d91109b423173720ab17f099105406917 100644 (file)
--- a/fov.lisp
+++ b/fov.lisp
@@ -208,3 +208,28 @@ Returns: focal-length object-distance image-distance magnification bellows-facto
   "Returns the bellows factor, the ratio of effective aperature to actual aperture."
   (1+ (magnification :focal-length focal-length :object-distance object-distance)))
 
+(defun extension-tube (focal-length &key original-object-distance original-image-distance original-magnification
+                      new-object-distance new-image-distance new-magnification extension-length (units :feet))
+  "Computes the parameters for using extension tubes.
+Requires: 1. original-object-distance, original-image-distance, or original-magnification
+          2. new-object-distance, new-image-distance, new-magnification, or extension-length
+Returns: original-object-distance, original-image-distance, original-magnification, original-bellows-factor
+         new-object-distance, new-image-distance, new-magnification, extension-length."
+  
+  (multiple-value-bind (focal-length o-od o-id o-m o-bf)
+      (close-up :focal-length focal-length :object-distance original-object-distance
+               :image-distance original-image-distance :magnification original-magnification :units units)
+    
+    (cond
+     (extension-length
+      (multiple-value-bind (focal-length n-od n-id n-m n-bf)
+         (close-up :focal-length focal-length :image-distance (+ o-id extension-length) :units units)
+       (values o-od o-id o-m o-bf n-od n-id n-m n-bf extension-length)))
+     ((not extension-length)
+      (multiple-value-bind (focal-length n-od n-id n-m n-bf)
+         (close-up :focal-length focal-length :object-distance new-object-distance
+                   :image-distance new-image-distance :magnification new-magnification :units units)
+       (values o-od o-id o-m o-bf n-od n-id n-m n-bf (- n-id o-id)))))))
+
+
+