675cba1dba01
Coordinate utils
author | Steve Losh <steve@stevelosh.com> |
---|---|
date | Wed, 11 May 2016 00:24:58 +0000 |
parents | 5d8cc8199ec1 |
children | 8547dda4da61 |
branches/tags | (none) |
files | coding-math.asd package.lisp src/3d/coordinates.lisp |
Changes
--- a/coding-math.asd Tue May 10 23:59:15 2016 +0000 +++ b/coding-math.asd Wed May 11 00:24:58 2016 +0000 @@ -35,5 +35,6 @@ (:module "3d" :serial t :components ((:file "vectors") + (:file "coordinates") (:file "demo")))))))
--- a/package.lisp Tue May 10 23:59:15 2016 +0000 +++ b/package.lisp Wed May 11 00:24:58 2016 +0000 @@ -207,6 +207,18 @@ #:with-vec3 #:with-vec3s)) +(defpackage #:coding-math.3d.coordinates + (:use + #:cl + #:coding-math.math + #:coding-math.3d.vectors + #:coding-math.utils + #:coding-math.quickutils) + (:export + #:cartesian-to-cylindrical + #:cylindrical-to-cartesian + )) + (defpackage #:coding-math.3d.demo (:use #:cl @@ -216,5 +228,6 @@ #:coding-math.fps #:coding-math.math #:coding-math.3d.vectors + #:coding-math.3d.coordinates ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/3d/coordinates.lisp Wed May 11 00:24:58 2016 +0000 @@ -0,0 +1,29 @@ +(in-package #:coding-math.3d.coordinates) + +;;; For this project, we'll define X and Y to be the typical 2D screen axes, and +;;; Z to be going into the screen (so it's a left-handed coordinate system). +;;; +;;; Cartesian coordinate vectors are: +;;; +;;; (x y z) +;;; +;;; Cylindrical coordinate vectors are: +;;; +;;; (radius azimuth height) where height is Y +;;; +;;; Polar coordinate vectors are: +;;; +;;; TODO + +(defun cylindrical-to-cartesian (coords) + (with-vec3 (radius azimuth height) coords + (make-vec3 (* radius (cos azimuth)) ; x + height ; y + (* radius (sin azimuth))))) ; z + +(defun cartesian-to-cylindrical (coords) + (with-vec3 (x y z) coords + (make-vec3 (sqrt (+ (square x) (square z))) ; r + (atan z x) ; a + y))) ; h +