马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
 - (defun XD::Geom:AngleToOctant (ang /)
- ; 将角度转换为 [0, 2π) 范围内,并根据角度所在的区间返回对应的象限或坐标轴。
- ;
- ; 该函数将输入角度 `ang` 归一化到 [0, 2π) 范围,并根据该角度所在的区间返回对应的区间编号。
- ; 区间划分及对应关系如下:
- ; 1. 0 ~ π/4 -> 正X轴 (返回 8)
- ; 2. π/4 ~ π/2 -> 第一象限 (返回 1)
- ; 3. π/2 ~ 3π/4 -> 第二象限 (返回 2)
- ; 4. 3π/4 ~ π -> 第三象限 (返回 3)
- ; 5. π ~ 5π/4 -> 第四象限 (返回 4)
- ; 6. 5π/4 ~ 3π/2 -> 正Y轴 (返回 5)
- ; 7. 3π/2 ~ 7π/4 -> 负X轴 (返回 6)
- ; 8. 7π/4 ~ 2π -> 负Y轴 (返回 7)
- ;
- ; 参数:
- ; ang - 输入角度(以弧度表示),可以是任何浮动值。
- ;
- ; 返回值:
- ; 返回对应区间的编号(整数),范围从 1 到 8。
- ;
- ; 例子:
- ; (XD::Geom:AngleToOctant pi) ; 返回 3,因为 π 对应第三象限
- ; (XD::Geom:AngleToOctant (* pi 1.5)) ; 返回 5,因为 3π/2 对应正Y轴
-
- ;; 归一化角度,使其落入 [0, 2π) 范围
- (setq ang (mod ang (* pi 2)))
- ;; 根据角度所在区间返回对应的区间编号
- (cond
- ((< ang (* pi 0.25)) 8) ;; 0 ~ π/4 -> 正X轴
- ((< ang (* pi 0.5)) 1) ;; π/4 ~ π/2 -> 第一象限
- ((< ang (* pi 0.75)) 2) ;; π/2 ~ 3π/4 -> 第二象限
- ((< ang pi) 3) ;; 3π/4 ~ π -> 第三象限
- ((< ang (* pi 1.25)) 4) ;; π ~ 5π/4 -> 第四象限
- ((< ang (* pi 1.5)) 5) ;; 5π/4 ~ 3π/2 -> 正Y轴
- ((< ang (* pi 1.75)) 6) ;; 3π/2 ~ 7π/4 -> 负X轴
- (t 7) ;; 7π/4 ~ 2π -> 负Y轴
- )
- )
|