天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 96|回复: 0

点至直线的距离和垂足点计算

[复制链接]
  • TA的每日心情
    开心
    昨天 08:01
  • 签到天数: 82 天

    [LV.6]常住居民II

    1585

    主题

    204

    回帖

    214748万

    积分

    管理员

    积分
    2147483647
    发表于 2024-3-16 09:56:50 | 显示全部楼层 |阅读模式
    1.     //点到直线的垂足点
    2.     public static Coordinate getFootPoint(Coordinate point, Coordinate pnt1, Coordinate pnt2)
    3.     {
    4.         double A=pnt2.y-pnt1.y;     //y2-y1
    5.         double B=pnt1.x-pnt2.x;     //x1-x2;
    6.         double C=pnt2.x*pnt1.y-pnt1.x*pnt2.y;     //x2*y1-x1*y2
    7.         if (A * A + B * B < 1e-13) {
    8.             return pnt1;   //pnt1与pnt2重叠
    9.         }
    10.         else if (Math.abs(A * point.x + B * point.y + C) < 1e-13) {
    11.             return point;   //point在直线上(pnt1_pnt2)
    12.         }
    13.         else {
    14.             double x = (B * B * point.x - A * B * point.y - A * C) / (A * A + B * B);
    15.             double y = (-A * B * point.x + A * A * point.y - B * C) / (A * A + B * B);
    16.             Coordinate fpoint = new Coordinate();
    17.             fpoint.x = x;
    18.             fpoint.y = y;
    19.             return fpoint;
    20.         }
    21.     }
    22.     public static double getDistancePoineToLine_planeCoord(Coordinate point, Coordinate pnt1, Coordinate pnt2)
    23.     {   //平面坐标中
    24.         double A=pnt2.y-pnt1.y;     //y2-y1
    25.         double B=pnt1.x-pnt2.x;     //x1-x2;
    26.         double C=pnt2.x*pnt1.y-pnt1.x*pnt2.y;     //x2*y1-x1*y2
    27.         if (A * A + B * B < 1e-13) {   //pnt1与pnt2重叠
    28.             double dx = point.x - pnt1.x;
    29.             double dy = point.y - pnt1.y;
    30.             return Math.sqrt(dx * dx + dy * dy);
    31.         }
    32.         else if (Math.abs(A * point.x + B * point.y + C) < 1e-13) {
    33.             return 0;   //point在直线上(pnt1_pnt2)
    34.         }
    35.         else {
    36.             double distance = Math.abs(A * point.x + B * point.y + C) / Math.sqrt(A * A + B * B);
    37.             return distance;
    38.         }
    39.     }
    40.     public static double getDistance_wgs84(Coordinate p1, Coordinate p2)
    41.     {
    42.         return getDistance_wgs84(p1.x,p1.y,p2.x,p2.y);
    43.     }
    44.     //计算两经纬度点的距离,单位米
    45.     public static double getDistance_wgs84(double p1_x,double p1_y, double p2_x,double p2_y)
    46.     {
    47.         double lat1=p1_x;
    48.         double lon1=p1_y;
    49.         double lat2=p2_x;
    50.         double lon2=p2_y;
    51.         //
    52.         double earch_radius=6371008.8;   // 地球半径 平均值  米
    53.         //用haversine公式计算球面两点间的距离。
    54.         //经纬度转换成弧度
    55.         double h_lat1=lat1*Math.PI/180.0;
    56.         double h_lon1=lon1*Math.PI/180.0;
    57.         double h_lat2=lat2*Math.PI/180.0;
    58.         double h_lon2=lon2*Math.PI/180.0;
    59.         //差值
    60.         double vlon=Math.abs(h_lon1-h_lon2);
    61.         double vlat=Math.abs(h_lat1-h_lat2);
    62.         //
    63.         double h=HaverSin(vlat)+Math.cos(h_lat1)*Math.cos(h_lat2)*HaverSin(vlon);
    64.         //
    65.         double d=2*earch_radius*Math.asin(Math.sqrt(h));
    66.         //
    67.         return d;
    68.     }
    69.     public static double HaverSin(double theta)
    70.     {
    71.         double v=Math.sin(theta/2);
    72.         return v*v;
    73.     };
    复制代码

     

     

     

     

    点至直线的距离和垂足点计算
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-5-17 19:53 , Processed in 0.058535 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表