找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1972|回复: 8

[每日一码] 判断一个点是否在圆弧线上或在圆弧线的延长线上

[复制链接]

已领礼包: 146个

财富等级: 日进斗金

发表于 2014-8-29 21:54:05 | 显示全部楼层 |阅读模式

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

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

×
判断一个点是否在圆弧线上或在圆弧线的延长线上
  1. (defun inters_point&arc (c-centerpoint c-rad r-start-ang r-end-ang p-point1 show / return_result_lgx interangle-lgx)
  2. ;;;原创,编写:刘国新
  3. ;;;判断一个点是否在圆弧线上或在圆弧线的延长线上
  4. ;;;使用方法如下
  5. ;;;(inters_point&arc (cdr (assoc 10 (setq arc (entget (car (entsel "请选择圆弧\n")))))) (cdr (assoc 40 arc)) (cdr (assoc 50 arc))
  6. ;;;(cdr (assoc 51 arc)) (getpoint "请点选:") "show")
  7. (setq return_result_lgx nil)
  8. (if (= r-start-ang nil)
  9. (setq r-start-ang 0.0)
  10. )
  11. (if (= r-end-ang nil)
  12. (setq r-end-ang 0.0)
  13. )
  14. (setq r-start-ang (atof (angtos r-start-ang 0 8)))
  15. (setq r-end-ang (atof (angtos r-end-ang 0 8)))
  16. (if (and (= r-end-ang 0.0)(= r-start-ang 0.0))
  17. (setq r-end-ang 360.0)
  18. )
  19. (if (or (= c-centerpoint nil) (= c-rad nil) (= p-point1 nil))
  20. (setq return_result_lgx nil)
  21. (progn
  22. (if (equal c-rad (distance c-centerpoint p-point1) 0.0005)
  23. (progn
  24. (setq interangle-lgx (atof (angtos (angle c-centerpoint p-point1) 0 8)))
  25. (if (< r-end-ang r-start-ang)
  26. (if (or (<= interangle-lgx r-end-ang)(>= interangle-lgx r-start-ang))
  27. (progn
  28. (if (/= show nil)
  29. (princ "\n点在圆弧线上!!!\n")
  30. )
  31. (setq return_result_lgx 1)
  32. )
  33. (progn
  34. (if (/= show nil)
  35. (princ "\n点在圆弧线的延长线上!!!\n")
  36. )
  37. (setq return_result_lgx 2)
  38. )
  39. )
  40. (if (and (>= interangle-lgx r-start-ang)(<= interangle-lgx r-end-ang))
  41. (progn
  42. (if (/= show nil)
  43. (princ "\n点在圆弧线上!!!\n")
  44. )
  45. (setq return_result_lgx 1)
  46. )
  47. (progn
  48. (if (/= show nil)
  49. (princ "\n点在圆弧线的延长线上!!!\n")
  50. )
  51. (setq return_result_lgx 2)
  52. )
  53. )
  54. )
  55. )
  56. (progn
  57. (if (/= show nil)
  58. (princ "\n点不在圆弧线上或圆弧线的延长线上!!!\n")
  59. )
  60. (setq return_result_lgx nil)
  61. )
  62. )
  63. )
  64. )
  65. (princ)
  66. return_result_lgx
  67. )


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

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-8-30 00:22:52 来自手机 | 显示全部楼层
感觉复杂了

点评

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

使用道具 举报

已领礼包: 9858个

财富等级: 富甲天下

发表于 2014-8-30 07:38:52 | 显示全部楼层
  1. (defun orarc (pt arcen)
  2. (setq ent (entget arcen))
  3. (setq r (cdr(assoc 40 ent)))
  4. (setq pc (cdr(assoc 10 ent)))
  5. (setq dis (distance pt pc))
  6. (if (equal r dis 1e-6)
  7.   (if (osnap pt "NEAR")
  8.    (princ "点在弧上")
  9.    (princ "点在延长线上")
  10.   )
  11.   (princ "点不在弧上")
  12. )
  13. )
  14. ;用法:(orarc (getpoint) (car(entsel)))

点评

不好意思,没有分析你的代码其中(osnap pt "NEAR")是会误判的呀,如果你的点不在圆弧上但在圆弧线的延长线上,但你的点正处于其它图素上,就会误判呀.  详情 回复 发表于 2014-8-30 12:28
这位兄弟,我的使用方法中的提示可能给你一些误解,我这个程序只是计算,在完全没有圆弧和点的情况下,只是给定各个参数来判断的。当然你可以根据给定的各个参数先画出圆弧再来用你的这个代码也是可以的。(我  详情 回复 发表于 2014-8-30 08:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2014-8-30 07:56:17 | 显示全部楼层

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

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2014-8-30 08:04:31 | 显示全部楼层

      这位兄弟,我的使用方法中的提示可能给你一些误解,我这个程序只是计算,在完全没有圆弧和点的情况下,只是给定各个参数来判断的。当然你可以根据给定的各个参数先画出圆弧再来用你的这个代码也是可以的。(我的使用方法中的提示是想提示如何获得参数?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 146个

财富等级: 日进斗金

 楼主| 发表于 2014-8-30 12:28:06 | 显示全部楼层

     不好意思,没有分析你的代码其中(osnap pt "NEAR")是会误判的呀,如果你的点不在圆弧上但在圆弧线的延长线上,但你的点正处于其它图素上,就会误判呀.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-12-7 16:49:57 | 显示全部楼层
用点到圆心的距离是否等于半径 不就能判断出来吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1094个

财富等级: 财源广进

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

使用道具 举报

发表于 2021-11-7 15:47:22 | 显示全部楼层
通过点到圆心的距离是否等于半径即可判断了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 22:06 , Processed in 0.179125 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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