Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 点C与大圆上圆弧AB的距离不正确_Java_Geometry_Line_Point - Fatal编程技术网

Java 点C与大圆上圆弧AB的距离不正确

Java 点C与大圆上圆弧AB的距离不正确,java,geometry,line,point,Java,Geometry,Line,Point,我得到的CD长度不正确,其中D标记了弧AB上第三点C的投影: 输入上述代码:: startX,startY-弧的起点坐标-->(48.1388,11.54988) 端点,端点的弧坐标-->(48.139,11.54988) thirdX,thirdY-点C离弧的坐标-->(48.1389,11.5496) dXt将为-13.41654587971497米,但预期值为31.16949米 我已经根据我发现的方程式编写了代码: 我无法找到错误值的原因,请帮助。谢谢 private static voi

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

输入上述代码::

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

端点,端点的弧坐标-->(48.139,11.54988)

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

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

我已经根据我发现的方程式编写了代码: 我无法找到错误值的原因,请帮助。谢谢

private static void pointToArcDistance(double thirdX, double thirdY, double startX, double startY, double endX, double endY) { double R = 6371000; double φ1 = startX * Math.PI / 180; double φ2 = endX * Math.PI / 180; double Δφ = (endX - startX) * Math.PI / 180; double Δλ = (endY - startY) * Math.PI / 180; double a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double d13 = R * c; // distance between start & endPoint in meters double brng12 = bearing(startX, startY, endX, endY); double brng13 = bearing(startX, startY, thirdX, thirdY); double δ13 = d13 / R; double dXt = Math.asin(Math.sin(δ13) * Math.sin(brng13 - brng12)) * R; System.out.println("tangent distance(CD)::" + dXt); } private static double bearing(double lat1, double long1, double lat2, double long2) { double y = Math.sin(long2 - long1) * Math.cos(lat2); double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(long2 - long1); double polarDegrees = toDegrees(Math.atan2(y, x)); return polarDegrees 专用静态无效点到ArcDistance(双三分之一、双三分之一、双星X、双星、, 双端X,双端Y){ 双R=6371000; 双φ1=startX*Math.PI/180; 双φ2=endX*Math.PI/180; 双Δφ=(endX-startX)*数学PI/180; 双Δλ=(endY-startY)*数学π/180; 双a=数学sin(Δφ/2)*数学sin(Δφ/2)+ 数学cos(φ1)*数学cos(φ2)* 数学sin(Δλ/2)*数学sin(Δλ/2); double c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)); double d13=R*c;//起点和终点之间的距离(米) 双轴承12=轴承(startX、startY、endX、endY); 双轴承13=轴承(startX、startY、THERDX、THERDY); 双δ13=d13/R; double 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=数学cos(lat1)*数学sin(lat2)- 数学sin(lat1)*数学cos(lat2)*数学cos(long2-long1); 双极性=toDegrees(数学上的atan2(y,x));
返回极坐标以查找点到圆弧的距离:

  • 首先,找到圆弧所暗示的椭圆形的中心
  • 使用atan2查找到该点的角度
  • 用cos(角度)*r1,sin(角度)*r2求出椭圆的x,y截距
  • 使用从x、y截距到该点的距离公式

  • 您可以在此处将弧度变换为度:

    double polarDegrees = toDegrees(Math.atan2(y, x));
    
    但是接下来的计算需要弧度


    因此,只需删除
    toDegrees

    您的问题是关于点到弧的距离,但您发布的函数是关于点到线的抱歉。该方法是关于点到弧的距离。我现在也更新了名称。非常感谢您的快速响应。我无法正确地显示它,findi的目的是什么第一步是确定椭圆的中心?第三步是r1和r2是什么?请帮助我,我不是一个数学爱好者。1.你想找到椭圆的中心,这样你就可以找到从中心到点的角度。2.椭圆有两个半径(r1和r2):每个轴一个。