• 各种计算


    平面坐标计算代码

    /// 平面坐标系,通过三角函数求终点坐标
    /// startPoint(x,y): 起点
    /// angle: 角度
    /// distance: 距离
    /// <returns>终点坐标</returns>
    function calNewPointByAngle2(startPoint, angle, distance) {
        var endPoint = {};
        
        // 角度转弧度
        var radian = (angle * Math.PI) / 180;
        
        // 计算新坐标(对于无限接近0的数字,此处没有优化)
        endPoint.x = startPoint.x + distance * Math.sin(radian);
        endPoint.y = startPoint.y + distance * Math.cos(radian);
        
        return endPoint;
    }

    注意:

    
    

            1. 计算坐标时,对于无限接近0的小数没有进行优化,可根据实际转换为0

    
    

            2. 球面坐标计算时,不同维度球面周长不同,计算x偏移量时,需要根据所在维度进行转换

     

    球面坐标计算代码

    /// 球面坐标系,通过三角函数求终点坐标
    /// startPoint(lng,lat,alt): 起点
    /// angle: 角度
    /// distance: 距离
    /// <returns>终点坐标</returns>
    function calNewPointByAngle3(startPoint, angle, distance) {
        var rate = Math.cos(startPoint.lat * Math.PI / 180); // 指定维度球面长度和赤道长度的比率
    
        var lat_meter = 111111; // 1维度 ≈ 111,111米
        var r = angle * Math.PI / 180.0;
        var x = Math.sin(r) * distance;
        var y = Math.cos(r) * distance;
        x = x / lat_meter / rate; // x偏移量需要根据所在维度进行计算
        y = y / lat_meter;
    
        return {
            x: startPoint.lng + x,
            y: startPoint.lat + y,
            z: startPoint.alt
        };
    }

    注意:

    
    

            1. 计算坐标时,对于无限接近0的小数没有进行优化,可根据实际转换为0

    
    

            2. 球面坐标计算时,不同维度球面周长不同,计算x偏移量时,需要根据所在维度进行转换

     
  • 相关阅读:
    今天面试一些程序员(新,老)手的体会
    UVA 10635 Prince and Princess
    poj 2240 Arbitrage
    poj 2253 Frogger
    poj 2485 Highways
    UVA 11258 String Partition
    UVA 11151 Longest Palindrome
    poj 1125 Stockbroker Grapevine
    poj 1789 Truck History
    poj 3259 Wormholes
  • 原文地址:https://www.cnblogs.com/lingLuoChengMi/p/14325991.html
Copyright © 2020-2023  润新知