(in-package #:photo)
+(defun sort-size (size)
+ "Returns a cons pair with the smaller size first."
+ (if (>= (car size) (cdr size))
+ (cons (cdr size) (car size))
+ (cons (car size) (cdr size))))
+
+(defun print-magnification (imager-size print-size)
+ "Returns the magnification required between an imager and print sizes
+while taking crop into consideration."
+ (setf imager-size (sort-size imager-size))
+ (setf print-size (sort-size print-size))
+ (float (max (/ (car print-size) (car imager-size))
+ (/ (cdr print-size) (cdr print-size)))))
+
(defun coc (imager-size &key (lpm 5) (minimum-distance 250)
(viewing-distance 250)
(print-size (output-dimensions :8x10in)))
"Returns circle of confusion in mm and print magnification for a format.
Default resolving power is 5 lpm at 25cm."
-
- (let* ((imager-max (max (car imager-size) (cdr imager-size)))
- (imager-min (min (car imager-size) (cdr imager-size)))
- (print-max (max (car print-size) (cdr print-size)))
- (print-min (min (car print-size) (cdr print-size)))
- (magnification (max (/ print-max imager-max) (/ print-min imager-min)))
+ (let* ((magnification (print-magnification imager-size print-size))
(resolution-factor (/ (* magnification lpm minimum-distance) viewing-distance))
(coc (/ 1.0d0 resolution-factor)))
(values coc magnification)))