如何简洁判断角度是否接近正立状态(0/90/180/270°)?
更简洁的角度筛选方案
你的判断逻辑可以通过角度取模90°的技巧大幅简化,核心思路是:所有正立状态的角度都是90°的整数倍,只需判断角度与最近的90°倍数的偏差是否在允许范围内即可。
优化后的代码实现
// 先将角度归一化到0-360°范围(处理负数或超过360°的异常情况) angle = angle % 360; if (angle < 0) angle += 360; // 计算角度与最近90°倍数的偏差值 double remainder = angle % 90; bool isUpright = remainder <= maxTilt || remainder >= 90 - maxTilt; var tooTilted = !isUpright;
原理说明
- 角度归一化:确保角度落在0-360°区间,避免负数、超大值干扰后续判断。
- 取模90°:把任意角度转化为0-90°范围内的余数,这个余数直接代表当前角度与最近的90°倍数的偏差(比如185°模90得5°,说明离180°偏差5°;85°模90得85°,说明离90°偏差5°)。
- 偏差判断:如果余数≤maxTilt,说明角度接近某个90°倍数;如果余数≥90-maxTilt,说明角度接近下一个90°倍数。只要满足任一条件,就属于正立状态。
这种写法不仅代码更简洁,逻辑也更直观,避免了重复的区间判断,性能和原代码一致甚至更优。
内容的提问来源于stack exchange,提问作者John V
相关产品推荐
相关产品推荐

