Java:关于弧度,Math.cos,Math.sin,double和long的问题

时间:2011-03-05 09:38:15

标签: java math

我需要在我的java代码中实现harvesine距离。

我在Javascript中找到了这个代码段,我需要将其转换为java。

  1. 如何在Java中将纬度和经度转换为弧度?
  2. Math.sin想在Java中使用double。我应该以弧度为单位传递先前转换的值吗?
  3. Math.sin和Math.cos返回很长时间。我应该声明一个长的并将其传递给Math.sqrt或将其转换为double?
  4. 感谢

    dLat = (lat2-lat1).toRad();
    dLon = (lng2-lng1).toRad(); 
    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); 
    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    d = R * c;
    return d;
    

3 个答案:

答案 0 :(得分:7)

首先,您应该阅读javadoc。 sin(double)在参数中采用double,这是弧度中的角度,如文档中所述。您还可以在链接页面上找到sqrt也需要加倍。

然后,您应该知道java可以自动执行非破坏性转换。因此,如果一个方法需要一个双倍并且你有一个很长的时间,那就不会有问题,因为转换长期没有损失 - >双。反之亦然,因此Java拒绝编译。

对于弧度转换,您将在Math类中找到toRadians方法。

答案 1 :(得分:5)

  1. 如果您有度数值,请执行degrees * Math.PI / 180。或者更好地使用评论中 coobird 建议的功能(不知道)。
  2. 是的,您可以传递任何双倍值。 (就此而言,任何数字。)
  3. 不,两个函数都采用double参数。检查the docs

答案 2 :(得分:2)