找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 215|回复: 0

[几何] XD::Geom:AngleToRange8

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2025-3-24 18:03:14 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Geom:AngleToRange8
调用格式: (XD::Geom:AngleToRange8 ang)
参数说明: ang --- 实数
返回值: 整数
函数简介: ;;; 函数名称: XD::Geom:AngleToRange
;;; 功能: 将输入角度 (弧度) 转换为 8 个等分区间的编号 (1-8)。
;;; 该函数会先将角度归一化到 [0, 2π) 范围,然后返回对应的区间编号。
;;; 参数:
;;; - ANG (浮点数): 输入角度,单位为弧度。
;;; 返回值:
;;; - 整数 (1~8): 代表角度所在的 8 个等分区间。
函数来源: 二次修改
函数作者:
适用版本: 不限 
最后更新时间: 2025-03-24
备注: -
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 marting 于 2025-3-24 18:06 编辑

  1. ;;; 函数名称: XD::Geom:AngleToRange
  2. ;;; 功能: 将输入角度 (弧度) 转换为 8 个等分区间的编号 (1-8)。
  3. ;;;      该函数会先将角度归一化到 [0, 2π) 范围,然后返回对应的区间编号。
  4. ;;; 参数:
  5. ;;;   - ANG (浮点数): 输入角度,单位为弧度。
  6. ;;; 返回值:
  7. ;;;   - 整数 (1~8): 代表角度所在的 8 个等分区间。
  8. (defun XD::Geom:AngleToRange8 (ang /)
  9.   ;; 归一化角度,使其落入 [0, 2π) 范围
  10.   (setq ang (mod (+ ang (* pi 2)) (* pi 2)))

  11.   ;; 判断角度所在的 8 个区间
  12.   (cond
  13.     ((and (>= ang (* pi 0.0)) (< ang (* pi 0.25))) 1) ;; 0 ~ π/4
  14.     ((and (>= ang (* pi 0.25)) (< ang (* pi 0.5))) 2) ;; π/4 ~ π/2
  15.     ((and (>= ang (* pi 0.5)) (< ang (* pi 0.75))) 3) ;; π/2 ~ 3π/4
  16.     ((and (>= ang (* pi 0.75)) (< ang (* pi 1.0))) 4) ;; 3π/4 ~ π
  17.     ((and (>= ang (* pi 1.0)) (< ang (* pi 1.25))) 5) ;; π ~ 5π/4
  18.     ((and (>= ang (* pi 1.25)) (< ang (* pi 1.5))) 6) ;; 5π/4 ~ 3π/2
  19.     ((and (>= ang (* pi 1.5)) (< ang (* pi 1.75))) 7) ;; 3π/2 ~ 7π/4
  20.     ((and (>= ang (* pi 1.75)) (< ang (* pi 2.0))) 8) ;; 7π/4 ~ 2π
  21.   )
  22. )



可以进一步优化代码

  1. (defun XD::Geom:AngleToRange8 (ang /)
  2.   ;|将角度转换为八个区间区间的编号,并将边界值归入下一个区间。

  3.   该函数将输入角度 `ang` 归一化到 [0, 2π) 范围内,并根据归一化后的角度计算其所在的八个区间区间。区间编号从 1 到 8,划分如下:
  4.   
  5.     1. 0 ~ π/4 -> 第 1 区间
  6.     2. π/4 ~ π/2 -> 第 2 区间
  7.     3. π/2 ~ 3π/4 -> 第 3 区间
  8.     4. 3π/4 ~ π -> 第 4 区间
  9.     5. π ~ 5π/4 -> 第 5 区间
  10.     6. 5π/4 ~ 3π/2 -> 第 6 区间
  11.     7. 3π/2 ~ 7π/4 -> 第 7 区间
  12.     8. 7π/4 ~ 2π -> 第 8 区间

  13.   参数:
  14.     ang - 输入角度(弧度制),可以是任意浮动值。
  15.   
  16.   返回值:
  17.     返回一个整数,表示该角度所对应的区间区间编号,范围从 1 到 8。

  18.   示例:
  19.     (XD::Geom:AngleToRange8 0)       ; 返回 1,因为 0 对应第 1 区间
  20.     (XD::Geom:AngleToRange8 (* pi 1.5))  ; 返回 6,因为 3π/4 对应第 6 区间
  21.     (XD::Geom:AngleToRange8 (* pi 2))    ; 返回 8,因为 2π 对应第 8 区间
  22.     (XD::Geom:AngleToRange8 (* pi 0.25)) ; 返回 2,因为 π/4 对应第 2 区间
  23.   |;
  24.   ;; 归一化角度,使其落入 [0, 2π) 范围
  25.   (setq ang (mod (+ ang (* pi 2)) (* pi 2)))

  26.   ;; 计算区间编号,边界值属于下一个区间
  27.   (+ 1 (fix (/ ang (* pi 0.25))))
  28. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-4-28 10:23 , Processed in 0.370236 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表