找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2401|回复: 11

[求助] 程序思路探讨

[复制链接]

已领礼包: 79个

财富等级: 招财进宝

发表于 2013-11-14 17:18:18 | 显示全部楼层 |阅读模式

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

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

×
直线延伸到与圆心垂直处,直接上图说明:
执行前:

2.jpg



执行后:
1.jpg



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

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-14 18:18:00 | 显示全部楼层
本帖最后由 newer 于 2013-11-14 18:19 编辑

楼主,计算交点,和SSGET什么的有关系吗?
你的想法是已知什么? 让用户选什么?

给你个思路,从直线得到方向向量(mapcar '- endPt startPt),然后再得到垂向量,然后用 (mapcar '+ cen vec)得到过圆心垂直于直线的向量,然后你求这两个向量的交点就可以了。

点评

其实,我觉得难点应该在于,怎么来判断一个直线在哪个圆上或者是一个圆与哪两直线相交, 可能还有两直线的起点在一个圆的情况  详情 回复 发表于 2013-11-15 08:27
嗯,这样用inters求交点,然后修改startpoint endpoint  详情 回复 发表于 2013-11-14 18:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-14 18:32:36 来自手机 | 显示全部楼层
newer 发表于 2013-11-14 18:18
楼主,计算交点,和SSGET什么的有关系吗?
你的想法是已知什么? 让用户选什么?


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

使用道具 举报

已领礼包: 79个

财富等级: 招财进宝

 楼主| 发表于 2013-11-15 08:27:06 | 显示全部楼层
newer 发表于 2013-11-14 18:18
楼主,计算交点,和SSGET什么的有关系吗?
你的想法是已知什么? 让用户选什么?


其实,我觉得难点应该在于,怎么来判断一个直线在哪个圆上或者是一个圆与哪两直线相交,
可能还有两直线的起点在一个圆的情况

点评

可以这样求与圆相交的线  详情 回复 发表于 2013-11-15 09:10
感觉你没说明白你的问题,你就说下,就开始你想怎么做,怎么选,选什么,最后得到什么。  详情 回复 发表于 2013-11-15 08:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-15 08:33:30 | 显示全部楼层
zhuizhu 发表于 2013-11-15 08:27
其实,我觉得难点应该在于,怎么来判断一个直线在哪个圆上或者是一个圆与哪两直线相交,
可能还有两直 ...

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

使用道具 举报

已领礼包: 3884个

财富等级: 富可敌国

发表于 2013-11-15 08:55:25 | 显示全部楼层
按圆的边框获取直线,计算圆心到直线的垂点,并计算圆心和垂点的距离
如果这个距离小于圆的半径,那么就更改直线的端点为垂点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-11-15 09:07:47 | 显示全部楼层
1 临时圆心连线,用后删除
2 使用_extend
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-15 09:10:32 | 显示全部楼层
zhuizhu 发表于 2013-11-15 08:27
其实,我觉得难点应该在于,怎么来判断一个直线在哪个圆上或者是一个圆与哪两直线相交,
可能还有两直 ...

可以这样求与圆相交的线
  1. (defun c:tt (/ ss css lss)
  2.   (if (and (setq ss (ssget '((0 . "circle,line"))))
  3.            (setq css (ssget "p" '((0 . "circle"))))
  4.            (setq lss (xdrx_pickset_subtract ss css))
  5.       )
  6.     (progn
  7.       (mapcar '(lambda (c / p r)
  8.                  (setq p (xdrx_getpropertyvalue c "Center")
  9.                        r (xdrx_getpropertyvalue c "Radius")
  10.                  )
  11.                  (if (setq ll
  12.                             (vl-remove
  13.                               nil
  14.                               (mapcar
  15.                                 '(lambda (l)
  16.                                    (if
  17.                                      (or
  18.                                        (<=
  19.                                          (distance (xdrx_curve_getstartpoint l) p)
  20.                                          r
  21.                                        )
  22.                                        (<= (distance (xdrx_curve_getendpoint l) p)
  23.                                            r
  24.                                        )
  25.                                      )
  26.                                       l
  27.                                       nil
  28.                                    )
  29.                                  )
  30.                               )
  31.                             )
  32.                      )
  33.                    (cons c ll)
  34.                    c
  35.                  )
  36.                )
  37.               (xdrx_pickset->ents css)
  38.       )
  39.     )
  40.   )
  41. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-11-15 09:23:52 | 显示全部楼层
zhuizhu 发表于 2013-11-15 08:27
其实,我觉得难点应该在于,怎么来判断一个直线在哪个圆上或者是一个圆与哪两直线相交,
可能还有两直 ...

按直线的向量(斜率)求圆与直线的垂直距离,距离大于圆的半径,直线自然不与圆相交,否则就相交,继而再求垂直交点。
也可以先求垂足再判断是否相交,这要看实体的多少,数量少怎么次序都可以。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-15 09:46:12 | 显示全部楼层
本帖最后由 newer 于 2013-11-15 09:49 编辑

我想你之所以没选到圆,是因为你没以后把点适当的延伸点,下面代码给你写注释了,你参考下思路。
技巧是延伸的长度用当前的PICKBOX的高度,这样可以适合任意的图形大小,因为这个高度是相对于屏幕视觉显示的
三种情况,点在圆内,点在圆外(PICKBOX内处理),点在圆上。
程序是选线找圆。


xdtb_extend.gif

  1. (defun c:tt ()
  2.   (if (setq ss (ssget '((0 . "LINE"))))        ; 选择LINE
  3.     (progn
  4.       (setq ents (xdrx_pickset->ents ss)) ; 实体表
  5.       (foreach n ents
  6.         (setq sPt (xdrx_getpropertyvalue n "StartPoint")
  7.               ePt (xdrx_getpropertyvalue n "EndPoint")
  8.               v (mapcar  '- ePt sPt)
  9.               v (xdrx_vector_normalize v)
  10.               h (XD::Doc:GetPickBoxHeight) ;;获得当前拾取框的屏幕高度
  11.               ePt1 (mapcar '+ ePt (xdrx_vector_product v h));;延伸端点,确保可以选到圆
  12.               sPt1 (mapcar '+ sPt (xdrx_vector_product (xdrx_vector_negate v) h))
  13.               v-p (xdrx_vector_PerpVector v);;垂向量
  14.               ss (ssget "f" (list sPt1 ePt1) '((0 . "CIRCLE")))
  15.         )
  16.         (if ss
  17.           (progn
  18.             (setq ents1 (xdrx_pickset->ents ss))
  19.             (foreach m ents1
  20.               (setq cen (xdrx_getpropertyvalue m "Center")
  21.                     p_3 (mapcar  '+    cen   v-p)
  22.                     int (inters  sPt  ePt  cen   p_3  nil )
  23.               )
  24.               (if int
  25.                 (progn
  26.                   (if (< (distance ePt int) (distance sPt int))
  27.                     (xdrx_curve_extend n int nil);; 延伸起点到交点
  28.                     (xdrx_curve_extend n int t);;延伸端点到交点
  29.                   )
  30.                   (xdrx_line_make int cen);;画圆心垂线
  31.                   (xdrx_entity_setcolor (entlast) 1)
  32.                 )
  33.               )
  34.             )
  35.           )
  36.         )
  37.       )
  38.     )
  39.   )
  40.   (princ)
  41. )





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

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-11-15 11:13:08 | 显示全部楼层
1.gif

框选直线,遍历直线
获取直线的起点 终点,
延伸两端点,用来选取与直线相交的圆
判断圆的选择集是否存在 遍历圆
判断直线起点 终点是否在圆上 或圆内
更改直线起点 终点

点评

按ll_j长老算法不用延伸 ssget的,有交点直接修改  详情 回复 发表于 2013-11-15 12:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-15 12:15:40 来自手机 | 显示全部楼层
炫翔 发表于 2013-11-15 11:13
框选直线,遍历直线
获取直线的起点 终点,
延伸两端点,用来选取与直线相交的圆

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 08:52 , Processed in 0.217195 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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