找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 151|回复: 1

[几何] XD::GEOM:VECTOR-SIDE

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2025-5-10 11:07:02 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::GEOM:VECTOR-SIDE
调用格式: (XD::GEOM:VECTOR-SIDE p1 p2 p3)
参数说明: P1 - 点(x y),待判断位置的点 / Point whose relative position is to be determined
P2 - 点(x y),起点 / Start point of reference vector
P3 - 点(x y),终点 / End point of reference vector
返回值: -1:P1 在向量 P2->P3 的右侧(右手规则)
0:三点共线
+1:P1 在向量左侧
函数简介: 判断三点构成向量的相对方向,返回点 P1 相对于从 P2 指向 P3 向量的方向。
Determines the relative direction of point P1 to the vector from P2 to P3.
功能包括 / Features:
- 计算两个向量 P2->P3 和 P2->P1 的叉积
Compute cross product of vectors P2->P3 and P2->P1
- 判断 P1 在该向量左侧、右侧,或共线
Determine whether P1 is to the left, right, or colinear with vector P2->P3
- 使用模糊容差处理浮点误差
Use a fuzzy tolerance to handle floating-point precision issues
函数来源: 二次修改
函数作者: newer
适用版本: 不限 
最后更新时间: 2025-05-10
备注: -
演示图片: -

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

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

×
  1. ;;; ------------------------------------------------------------------------
  2. ;;; 函数名称 / Function Name: XD::GEOM:VECTOR-SIDE
  3. ;;;
  4. ;;; 【功能说明 / Description】
  5. ;;;     判断三点构成向量的相对方向,返回点 P1 相对于从 P2 指向 P3 向量的方向。
  6. ;;;     Determines the relative direction of point P1 to the vector from P2 to P3.
  7. ;;;
  8. ;;;     功能包括 / Features:
  9. ;;;       - 计算两个向量 P2->P3 和 P2->P1 的叉积
  10. ;;;         Compute cross product of vectors P2->P3 and P2->P1
  11. ;;;       - 判断 P1 在该向量左侧、右侧,或共线
  12. ;;;         Determine whether P1 is to the left, right, or colinear with vector P2->P3
  13. ;;;       - 使用模糊容差处理浮点误差
  14. ;;;         Use a fuzzy tolerance to handle floating-point precision issues
  15. ;;;
  16. ;;; 【参数说明 / Parameters】
  17. ;;;     P1 - 点(x y),待判断位置的点 / Point whose relative position is to be determined
  18. ;;;     P2 - 点(x y),起点 / Start point of reference vector
  19. ;;;     P3 - 点(x y),终点 / End point of reference vector
  20. ;;;
  21. ;;; 【返回值 / Return Value】
  22. ;;;     -1:P1 在向量 P2->P3 的右侧(右手规则)
  23. ;;;      0:三点共线
  24. ;;;     +1:P1 在向量左侧
  25. ;;;
  26. ;;; 【依赖函数 / Dependencies】
  27. ;;;     - XD::GEOM:LIST-FUZ   : 计算三点之间适当的浮点容差 / Computes suitable fuzzy tolerance
  28. ;;;     - XD::CALC:ROUND      : 模糊舍入函数 / Rounds value with specified fuzziness
  29. ;;;
  30. ;;; 【使用示例 / Example Usage】
  31. ;;;     (XD::GEOM:VECTOR-SIDE '(1 1) '(0 0) '(0 2))  => 1  ; P1 在左侧
  32. ;;;     (XD::GEOM:VECTOR-SIDE '(0 -1) '(0 0) '(1 0)) => -1 ; P1 在右侧
  33. ;;;     (XD::GEOM:VECTOR-SIDE '(1 0) '(0 0) '(2 0))  => 0  ; 共线
  34. ;;;
  35. ;;; 【备注 / Notes】
  36. ;;;     - 返回值可用于多边形方向判断、点在边哪一侧等空间分析任务
  37. ;;;       Useful for polygon orientation, spatial side testing, etc.
  38. ;;; ------------------------------------------------------------------------
  39. (defun XD::GEOM:VECTOR-SIDE (p1 p2 p3 / a dx dx1 dy dy1 fuz)
  40.   ;; 计算向量 P2->P3 的 x 和 y 分量
  41.   (setq dx (- (car p3) (car p2)))
  42.   (setq dy (- (cadr p3) (cadr p2)))
  43.   
  44.   ;; 计算向量 P2->P1 的 x 和 y 分量
  45.   (setq dx1 (- (car p1) (car p2)))
  46.   (setq dy1 (- (cadr p1) (cadr p2)))
  47.   
  48.   ;; 计算三点之间的模糊容差
  49.   (setq fuz (XD::GEOM:LIST-FUZ (list p1 p2 p3)))
  50.   
  51.   ;; 计算向量叉积 dx*dy1 - dy*dx1
  52.   (setq a (- (* dx dy1) (* dy dx1)))
  53.   
  54.   ;; 应用模糊舍入处理误差
  55.   (setq a (XD::CALC:ROUND a fuz))
  56.   
  57.   ;; 若非零则将结果归一化为 -1 或 +1(方向)
  58.   (if (/= 0.0 a)
  59.     (progn (setq a (/ a (abs a)))))
  60.   
  61.   ;; 返回方向:-1, 0, 或 1
  62.   a
  63. )


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

已领礼包: 1346个

财富等级: 财源广进

发表于 2025-5-11 11:02:08 | 显示全部楼层
谢谢版大的分享!下载来收藏着
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-7 06:10 , Processed in 0.211958 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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