找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: xiao_longxin

[求助] [求助]:已知一条闭合多义线如何求在其区域内的一点的坐标

[复制链接]

已领礼包: 3个

财富等级: 恭喜发财

 楼主| 发表于 2005-3-31 08:56:44 | 显示全部楼层
最初由 狂刀 发布
[B]现在没空哦。
上面的几位朋友按我的思路可以试写出来的。 [/B]
那请楼主再把思路说详细点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-31 19:26:15 | 显示全部楼层
(defun hy_ijlist(lst i j);;;取得列表從i開始以后j數量的片段表如果j為nil則取出i以后的列表從0開始
  (setq aplist '())
  (if (= j nil)
      (repeat (+ i 1)
      (setq lst (cdr lst))
      (setq aplist lst))
      (progn
      (repeat j
      (setq aplist (cons (nth i lst) aplist))
        (setq i (1+ i))
        )
      (setq aplist (reverse aplist))
      )
    )
  aplist
  )
(defun hy_ocom(totlist num / needlist shuldlist numer stay);;處理數據列表分組每一組為NUM個,余項也為組
                                                           ;;FOR EXCAMPLE: (hy_ocom '(-64.4309 100.541 0.0 -106.992 144.345 0.0 1 2) 3)
                                                           ;;return : ((-106.992 144.345 0.0) (-64.4309 100.541 0.0) (1 2))
  (setq needlist totlist)
  (setq shuldlist nil)
  (if (> (length totlist) num)
    (progn
    (setq stay (rem (length totlist) num))
    (setq numer (/ (- (length totlist) stay) num))
    (repeat numer
      (setq shuldlist (cons (hy_ijlist needlist 0 num) shuldlist))
      (setq needlist (hy_ijlist needlist (- num 1) nil))
    )
    (setq shuldlist (reverse shuldlist))
    (if (/= stay 0) (setq remlist (reverse(hy_ijlist (reverse totlist) 0 stay))
                          shuldlist (append shuldlist (list remlist))))
    shuldlist
    )
    nil)
  )
(defun hy_interpoint(object1 object2 / jdtb);;返回兩圖元交點
(vl-load-com)
(setq jdtb (vla-intersectwith (vlax-ename->vla-object object1) (vlax-ename->vla-object object2) acExtendnone))
(setq jdtb (vlax-safearray->list (vlax-variant-value jdtb)))
(hy_ocom jdtb 3)
)
(defun hy_polyinp(poly / poly1 p1 p2 anglep1 anglep2 line dist1 needpoint
                         pointlist basedis nedis shpoint yourpoint)
  (setvar "osmode" 0)
  (setq poly1 (vlax-ename->vla-object poly))
  (vla-getboundingbox poly1 'p1 'p2)
  (setq p1 (vlax-safearray->list p1)
        p2 (vlax-safearray->list p2)
        anglep1 (angle p1 p2)
        anglep2 (angle p2 p1)
        p1 (polar p1 anglep2 5)
        p2 (polar p2 anglep1 5))
  (command "undo" "be")
  (command "line" p1 p2 "")(setq line (entlast))
  (command "trim" poly "" (list line p1) "")
  (setq line (entlast))
  (setq dist1 (vla-get-length (vlax-ename->vla-object line)))
  (setq needpoint (polar p2 anglep2 dist1))
  (foreach item (hy_interpoint line poly)
    (if (equal needpoint item 0.00001)
      (setq pointlist(vl-remove item (hy_interpoint line poly)))
      )
    )
  (setq basedis (distance needpoint (nth 0 pointlist)))
  (foreach item pointlist
    (if (<= (setq nedis (distance needpoint item)) basedis)
        (progn (setq basedis nedis)
               (setq shpoint item))
      )
    )
  (setq yourpoint (list (/ (+ (car needpoint) (car shpoint)) 2)
                        (/ (+ (cadr needpoint) (cadr shpoint)) 2)
                        0)
        )
  (vla-delete (vlax-ename->vla-object line))
  (command "undo" "e")
  yourpoint
  )
窃以为这样会比较方便一些,速度较快而且取得的点空间
较大!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-1 02:05:18 | 显示全部楼层
老虎不发威还以为是病猫

[iframe h=600 w=600]http://www.xdcad.net/forum/showthread.php?s=&postid=1769053#post1769053[/iframe]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-26 20:06:09 | 显示全部楼层
这样的帖子居然没人顶,怎么着也该弄个精华吧.
        感觉狂刀的思路是对的,所有曲线都适用.如果射线法不用做辅助线应该是最通用的,估计AUTOCAD内部机制就是这样,现在用LISP有点不大对劲.OFFSET最简单,同射线法一样,还是不正宗,而且有漏洞.
研究了狂刀兄的程序,an应该是法线的方向角吧,但仍然没弄明白的是怎么判断法线方向是向曲线内还是向曲线外,另外自相交曲线比如8字形还有问题.请狂刀兄赐教.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2006-4-27 09:11:14 | 显示全部楼层
楼上的函数仅适用于PLINE.对于SPLINE不行.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-5-21 20:50:52 | 显示全部楼层
我实现的思路是这样的:
将闭合曲线和要判断的点位,均辅助生成实体(点可画很小的圆,再生成实体),然后对两实体进行交集判断,当交集为真,则点在闭合曲线内,当交集为假则不在闭合曲线内。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 22:24 , Processed in 0.237116 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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