将值舍入到最接近45度的最简洁方法是什么?

时间:2015-04-25 13:39:21

标签: language-agnostic rounding

我的问题与问题here相同。

用户问:

  

我刚刚写了这个以返回最近的45度角。像0,45,90,135 ......

     

感觉必须有更好的方法来做到这一点。这工作正常,但看起来很乱。

    public function nearestDeg(degs:int):int {

        if (degs >= 0 && degs <= 45) {
            if (degs <= 23) {
                return 0;
            }else {
                return 45;
            }
        }

        if (degs > 45 && degs <= 90) {
            if (degs <= 68) {
                return 45;
            }else {
                return 90;
            }
        }

        if (degs > 90 && degs <= 135) {
            if (degs <= 113) {
                return 90;
            }else {
                return 135;
            }
        }

        if (degs > 135 && degs <= 180) {
            if (degs <= 158) {
                return 135;
            }else {
                return 180;
            }
        }

        if (degs > 180 && degs <= 225) {
            if (degs <= 203) {
                return 180;
            }else {
                return 225;
            }
        }

        if (degs > 225 && degs <= 270) {
            if (degs <= 248) {
                return 225;
            }else {
                return 270;
            }
        }

        if (degs > 270 && degs <= 315) {
            if (degs <= 293) {
                return 270;
            }else {
                return 315;
            }
        }

        if (degs > 315 && degs <= 360) {
            if (degs <= 338) {
                return 315;
            }else {
                return 360;
            }
        }


        return 0;

    }  

将值舍入到最接近45度的最简洁方法是什么?

2 个答案:

答案 0 :(得分:6)

我将值除以45°,然后再向后乘以45°。伪代码:

deg = round(deg / 45) * 45;

假设:/运算符返回浮点表示,不执行整数除法。如果特定语言不对此进行处理,则应明确处理(例如,您可以除以45.0而不是45)。

答案 1 :(得分:0)

我知道 OP 要求学位,但弧度可能对其他人有帮助。

import numpy as np
round(radians/(np.pi/4))*np.pi/4