;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10; Package: photo -*- ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; ;;;; Name: convert.lisp ;;;; Purpose: Conversions functions for cl-photo ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: April 2005 ;;;; ;;;; $Id$ ;;;; ;;;; 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.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+))) ))