常见的 lisp 纬度和经度到课程
common lisp latitude and longitude to course
我当前项目的基础是编写一些可以计算两点之间直航的代码。我无法在网上找到 common lisp 的代码,因此我不得不翻译可用的代码。我认为我这样做是正确的,但它仍然不会 运行。任何帮助将不胜感激。
我遇到了障碍,有什么想法吗?出现以下错误:
;Compiler warnings for "nav.lisp" :
; In COURSE-CALC: Undefined function LAT1
; In COURSE-CALC: Undefined function LAT1
; In COURSE-CALC: Undefined function LAT2
我不明白为什么编译器认为变量是函数。
这是我目前的情况:
(defparameter *earth-radius* 6372.8)
(defparameter *e* (exp 1))
(defparameter *rad-conv* (/ pi 180))
(defun km->miles (km)
(* km .621371))
(defun miles->km (miles)
(* miles 1.60934))
(defun mph->mpm (mph)
(/ mph 60))
(defun kph->kpm (kph)
(/ kph 60))
(defun deg->rad (deg)
(* deg *rad-conv*))
(defun haversine (x)
(expt (sin (/ x 2)) 2))
(defun dist-rad (lat1 lng1 lat2 lng2)
(let* ((hlat (haversine (- lat2 lat1)))
(hlng (haversine (- lng2 lng1)))
(root (sqrt (+ hlat (* (cos lat1) (cos lat2) hlng)))))
(* 2 *earth-radius* (asin root))))
(defun dist-deg (lat1 lng1 lat2 lng2)
(dist-rad (deg->rad lat1)
(deg->rad lng1)
(deg->rad lat2)
(deg->rad lng2)))
;acos(sin(lat2)-sin(lat1)*cos(d)) / (sin(d)*cos(lat1))
(defun course-calc (lat1 lng1 lat2 lng2)
(acos(/(*(- (sin(lat2)) (sin(lat1))) (cos(dist-rad lat1 lng1 lat2 lng2))) (* (sin(dist-rad lat1 lng1 lat2 lng2)) (cos(lat1))))))
(defun course (lat1 lng1 lat2 lng2)
(if (< (sin (- lng1 lng2)) 0)
(course-calc lat1 lng1 lat2 lng2)
(-(* 2 pi)(course-calc lat1 lng1 lat2 lng2))))
course-calc
的定义中括号过多。表达式
(sin(lat2))
调用函数 lat2
,然后 sin
lat2
returns。但是,您的 lat2
不是函数而是变量。你想说的是
(sin lat2)
行尾的(cos(lat1))
也是如此。
我当前项目的基础是编写一些可以计算两点之间直航的代码。我无法在网上找到 common lisp 的代码,因此我不得不翻译可用的代码。我认为我这样做是正确的,但它仍然不会 运行。任何帮助将不胜感激。
我遇到了障碍,有什么想法吗?出现以下错误:
;Compiler warnings for "nav.lisp" :
; In COURSE-CALC: Undefined function LAT1
; In COURSE-CALC: Undefined function LAT1
; In COURSE-CALC: Undefined function LAT2
我不明白为什么编译器认为变量是函数。
这是我目前的情况:
(defparameter *earth-radius* 6372.8)
(defparameter *e* (exp 1))
(defparameter *rad-conv* (/ pi 180))
(defun km->miles (km)
(* km .621371))
(defun miles->km (miles)
(* miles 1.60934))
(defun mph->mpm (mph)
(/ mph 60))
(defun kph->kpm (kph)
(/ kph 60))
(defun deg->rad (deg)
(* deg *rad-conv*))
(defun haversine (x)
(expt (sin (/ x 2)) 2))
(defun dist-rad (lat1 lng1 lat2 lng2)
(let* ((hlat (haversine (- lat2 lat1)))
(hlng (haversine (- lng2 lng1)))
(root (sqrt (+ hlat (* (cos lat1) (cos lat2) hlng)))))
(* 2 *earth-radius* (asin root))))
(defun dist-deg (lat1 lng1 lat2 lng2)
(dist-rad (deg->rad lat1)
(deg->rad lng1)
(deg->rad lat2)
(deg->rad lng2)))
;acos(sin(lat2)-sin(lat1)*cos(d)) / (sin(d)*cos(lat1))
(defun course-calc (lat1 lng1 lat2 lng2)
(acos(/(*(- (sin(lat2)) (sin(lat1))) (cos(dist-rad lat1 lng1 lat2 lng2))) (* (sin(dist-rad lat1 lng1 lat2 lng2)) (cos(lat1))))))
(defun course (lat1 lng1 lat2 lng2)
(if (< (sin (- lng1 lng2)) 0)
(course-calc lat1 lng1 lat2 lng2)
(-(* 2 pi)(course-calc lat1 lng1 lat2 lng2))))
course-calc
的定义中括号过多。表达式
(sin(lat2))
调用函数 lat2
,然后 sin
lat2
returns。但是,您的 lat2
不是函数而是变量。你想说的是
(sin lat2)
行尾的(cos(lat1))
也是如此。