java - 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)); 返回极地度
解决方案
您可以在此处将弧度转换为度数:
double polarDegrees = toDegrees(Math.atan2(y, x));
但接下来的计算需要弧度。
所以只需删除toDegrees
推荐阅读
- javascript - 在对象数组中合并具有“相同键”的对象
- css - 自定义引导视频轮播错误下一个和上一个控件阻止轮播中视频的视频控件
- python - 关于使用 string.replace 和 regex 清理数据的问题
- docker - 如何在 nginx 容器中将环境变量与 lua 一起使用
- vue.js - 如何切换表中具有相同值的多行?
- python - 如何为 pos 增加价值?
- php - 删除 Hello Dolly 实际上会破坏我的 Wordpress 网站
- reactjs - React Ref's Deprecated - 什么是替代品?
- bash - Bash 变量编号按升序排列
- javascript - 如何将谷歌字体中的草书字体(字体名称中带有空格)包含到画布元素中