X-Git-Url: http://git.kpe.io/?p=cl-photo.git;a=blobdiff_plain;f=fov.lisp;h=fba5ce9d91109b423173720ab17f099105406917;hp=211820af13e616d9d5b83818b908f84e47eb8a15;hb=b95675fd79eb1c5a791267cdc4fc0584c4f14b3b;hpb=cd49c092c9ede840170af3301b9296cec4b0be3e diff --git a/fov.lisp b/fov.lisp index 211820a..fba5ce9 100644 --- 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))))))) + + +