如何在CLIPS中计算Haversine公式
How to calculate the Haversine formula in CLIPS
我正在尝试使用 latitude
和 longitude
计算到城市之间的距离。出于这个原因,我试图在 CLIPS 中使用 haversine 公式,但我无法计算 arctan2
(2 参数反正切)。有什么办法可以解决这个问题吗?
这是我要重现的代码:
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
var lat2 = 42.741;
var lon2 = -71.3161;
var lat1 = 42.806911;
var lon1 = -71.290611;
var R = 6371; // km
//has a problem with the .toRad() method below.
var x1 = lat2-lat1;
var dLat = x1.toRad();
var x2 = lon2-lon1;
var dLon = x2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
alert(d);
您可以根据 atan 定义一个实现 atan2 的 deffunction。
我正在尝试使用 latitude
和 longitude
计算到城市之间的距离。出于这个原因,我试图在 CLIPS 中使用 haversine 公式,但我无法计算 arctan2
(2 参数反正切)。有什么办法可以解决这个问题吗?
这是我要重现的代码:
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
var lat2 = 42.741;
var lon2 = -71.3161;
var lat1 = 42.806911;
var lon1 = -71.290611;
var R = 6371; // km
//has a problem with the .toRad() method below.
var x1 = lat2-lat1;
var dLat = x1.toRad();
var x2 = lon2-lon1;
var dLon = x2.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
alert(d);
您可以根据 atan 定义一个实现 atan2 的 deffunction。