首页 > 解决方案 > C点到大圆弧AB的距离不正确

问题描述

我得到了不正确的 CD 长度,其中 D 标记了弧 AB 上第三点 C 的投影:

输入上述代码::

startX,startY- 圆弧起点坐标--> (48.1388, 11.54988)

endX,endY-圆弧终点坐标--> (48.139, 11.54988)

thirdX,thirdY- 坐标点 C 远离圆弧--> (48.1389, 11.5496)

dXt 将变为 -13.41654587971497 米,但预期值为 31.16949

我已经根据我找到的方程式编写了代码:在这里 我找不到值不正确的原因,请帮助。谢谢。

    私人静态无效点ToArcDistance(双thirdX,双thirdY,双startX,双startY,
        双端X,双端Y){
        双 R = 6371000;
        双 φ1 = startX * Math.PI / 180;
        双 φ2 = endX * Math.PI / 180;
        双 Δφ = (endX - startX) * Math.PI / 180;
        双 Δλ = (endY - startY) * Math.PI / 180;
        双 a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
        Math.cos(φ1) * Math.cos(φ2) *
        Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
        双 c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        双 d13 = R * c; // 起点和终点之间的距离,以米为单位
        双 brng12 = 轴承(startX,startY,endX,endY);
        双 brng13 = 轴承(startX,startY,thirdX,thirdY);
        双 δ13 = d13 / R;
        双 dXt = Math.asin(Math.sin(δ13) * Math.sin(brng13 - brng12)) * R;
        System.out.println("切线距离(CD)::" + dXt);
    }
    
    私人静力双轴承(双纬1,双长1,双纬2,双长2){
        双 y = Math.sin(long2 - long1) * Math.cos(lat2);
        双 x = Math.cos(lat1) * Math.sin(lat2) -
        Math.sin(lat1) * Math.cos(lat2) * Math.cos(long2 - long1);
        双极度= toDegrees(Math.atan2(y,x));
        返回极地度

标签: javageometrylinepoint

解决方案


您可以在此处将弧度转换为度数:

double polarDegrees = toDegrees(Math.atan2(y, x));

但接下来的计算需要弧度。

所以只需删除toDegrees


推荐阅读