通过角度计算方向

本文介绍了一种将360度范围内的角度转换为具体地理方向的算法,包括八个正角方位及其偏角表示,适用于导航和定位系统中角度方向的精确描述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过计算360度以内的角度得出对应的地理方向

八个正角方位:正北、 东北、 正东、 东南、正南、西南、 正西、西北
其他方位以偏角正负数的方式表示

方向角度正负
正北0(360)正角
东北45正角
正东90正角
东南135正角
正南180正角
西南225正角
正西270正角
西北315正角
偏北+n°316~359偏正角
偏北-n°1~44偏负角
偏东+n°46~89偏正角
偏东-n°91~134偏负角
偏南+n°136~179偏正角
偏南-n°181~224偏负角
偏西+n°226~269偏正角
偏西-n°271~314偏负角
/**
 * 通过角度计算方向
 * @param {Number} angle 角度(0~359)
 * @returns {String}  方向
 */
function angle2direction(angle) {
    let str = '';
    if (!Number.isNaN(angle)) {
        angle = angle < 0 ? 0 : angle >= 359 ? 360 : angle; //处理不正常的角度及把359转成360方便计算

        let arr = ['正北', '东北', '正东', '东南', '正南', '西南', '正西', '西北'];

        let num = angle / 45; //每45度为一个正方向

        //如果是整数表示为八个正方向
        if (parseInt(num) === parseFloat(num)) {
            str = arr[num] || arr[0];
        } else {
            //非八个正方向
            let direction = '';
            if (num > 7 || num < 1) {
                direction = '北'; //偏北
            } else if (num > 1 && num < 3) {
                direction = '东'; //偏东
            } else if (num > 3 && num < 5) {
                direction = '南'; //偏南
            } else if (num > 5 && num < 7) {
                direction = '西'; //偏西
            }
            let slantAngle = Math.round(angle - 90 * Math.round(angle / 90)) + '°'; //偏角值(正角或负角)
            str = '偏' + direction + slantAngle;
        }
    }
    return str;
}
/**
 * 通过角度计算方向
 * @param {Number} angle 角度
 * @returns {String}  方向
 */
angle2direction(angle) {
     let str = '';
     if (!Number.isNaN(angle)) {
         angle = angle < 0 ? 0 : angle >= 359 ? 360 : angle; //处理不正常的角度及把359转成360方便计算

         if (angle >= 15 && angle < 75) {
             str = '东北';
         } else if (angle >= 75 && angle < 105) {
             str = '正东';
         } else if (angle >= 105 && angle < 165) {
             str = '东南';
         } else if (angle >= 165 && angle < 195) {
             str = '正南';
         } else if (angle >= 195 && angle < 255) {
             str = '西南';
         } else if (angle >= 195 && angle < 285) {
             str = '正西';
         } else if (angle >= 285 && angle < 354) {
             str = '西北';
         } else {
             str = '正北';
         }
     }
     return str;
 },
function direction(val) {
    if (typeof val === 'number' && val > -1) {
        let angle = 360 / 8;
        //分成8个方向,每个方向占45度
        let offsetAngle = angle / 2;
        //偏移角为正方位角的一半
        let computeAngle = val + offsetAngle;
        //原始角度加上偏移角度做为计算角
        computeAngle > 359 && (computeAngle -= 359);
        //计算角如果大于359度则减去359度再计算
        let num = Math.ceil(computeAngle / 45);

        switch (num) {
        case 1:
            return '正北';
        case 2:
            return '东北';
        case 3:
            return '正东';
        case 4:
            return '东南';
        case 5:
            return '正南';
        case 6:
            return '西南';
        case 7:
            return '正西';
        default:
            return '西北';
        }
    }
    return '-';
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值