X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=convert.lisp;h=f663cf8fc98e1651357ea99a0cc8edb70b8ded8f;hb=68888264bfdedb86e9bbceee6479e938cb854a51;hp=34eac1b69e05ea4442fe518a51ab7036bcdac07f;hpb=0c8ab037b4267adebe22e07249e0e36fe7ca5f17;p=cl-photo.git diff --git a/convert.lisp b/convert.lisp index 34eac1b..f663cf8 100755 --- a/convert.lisp +++ b/convert.lisp @@ -7,27 +7,87 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: April 2005 ;;;; -;;;; $Id: package.lisp 8596 2004-02-03 18:32:50Z kevin $ +;;;; $Id$ ;;;; -;;;; This file, part of cl-photo, is Copyright (c) 2005 by Kevin Rosenberg. -;;;; Rights of modification and redistribution are in the LICENSE file. +;;;; This file, part of cl-photo, is Copyright (c) 2005 by Kevin M. Rosenberg +;;;; +;;;; cl-photo users are granted the rights to distribute and use this software +;;;; as governed by the terms of the GNU General Public License v2 +;;;; (http://www.gnu.org/licenses/gpl.html) ;;;; ;;;; ************************************************************************* (in-package #:photo) (defconstant +radian->degrees+ (/ 360d0 pi 2)) -(defconstant +inches->mm+ 25.4) +(defconstant +inches->mm+ 25.4d0) +(declaim (inline diagonal)) (defun diagonal (x y) (sqrt (+ (* x x) (* y y)))) +(declaim (inline radians->degrees)) (defun radians->degrees (r) (* +radian->degrees+ r)) +(declaim (inline degrees->radians)) +(defun degrees->radians (r) + (/ r +radian->degrees+)) + +(declaim (inline mm->feet)) (defun mm->feet (d) (/ d +inches->mm+ 12)) +(declaim (inline feet->mm)) (defun feet->mm (d) (* d 12 +inches->mm+)) +(declaim (inline inches->mm)) +(defun inches->mm (d) + (* d +inches->mm+)) + +(declaim (inline mm->inches)) +(defun mm->inches (d) + (/ d +inches->mm+)) + +(defun length->mm (d units) + "Convert a length in units to mm." + (ecase units + (:mm d) + (:inches (inches->mm d)) + (:feet (* 12 (inches->mm d))) + (:yards (* 36 (inches->mm d))) + (:meters (* 1000 d)))) + +(defun mm->length (d units) + "Convert a number of mm to units." + (ecase units + (:mm d) + (:inches (mm->inches d)) + (:feet (/ (mm->inches d) 12)) + (:yards (/ (mm->inches d) 36)) + (:meters (/ d 1000)))) + +(defun format-dimensions (format) + "Returns format dimensions in mm." + (ecase format + (:aps-c (cons 22.7 15.1)) + ((:aps :dx) (cons 24 16)) + ((:35 :35mm) (cons 36 24)) + ((:645 :6x4.5cm) (cons 60 45)) + ((:6x6 :6x6cm) (cons 60 60)) + ((:6x7 :6x7cm) (cons 60 70)) + ((:6x9 :6x9cm) (cons 60 90)) + ((:4x5 :4x5in) (cons (* 4 +inches->mm+) (* 5 +inches->mm+))) + ((:5x7 :5x7in) (cons (* 5 +inches->mm+) (* 7 +inches->mm+))) + ((:8x10 :8x10in) (cons (* 8 +inches->mm+) (* 10 +inches->mm+))) + (:11x13.75in (cons (* 11 +inches->mm+) (* 13.75 +inches->mm+))) + (:11x16.5in (cons (* 11 +inches->mm+) (* 16.5 +inches->mm+))) + (:13x19in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + (:16x20in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + (:16x24in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + (:18x22.5in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + (:18x24in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + (:24x30in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + (:24x36in (cons (* 13 +inches->mm+) (* 19 +inches->mm+))) + ))