找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 830|回复: 12

[LISP函数]:求任意封闭图形中加一点的程序

[复制链接]
发表于 2004-7-30 23:42:01 | 显示全部楼层 |阅读模式

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

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

×
求任意封闭图形中加一点的程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-31 05:04:45 | 显示全部楼层
不明白你的意思. 可能一个很简单的问题, 但题意不清, 别人无法回答.
1. 是封闭曲线, 还是...
2. "加一点" 是创建点实体? 还是...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-31 23:42:34 | 显示全部楼层
1. 封闭曲线,封闭pline...多边型
2. "加一点" 是创建点实体,是在封闭曲线,封闭pline...多边型...圆形内部任意加一点的程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-8-6 19:38:56 | 显示全部楼层
利用 BoundaryBOX 在对角线画辅助线,然后求辅助线与封闭图形的交点,交点大于 1 时,在两个交点中间任取一点即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-6 21:19:47 | 显示全部楼层
楼上的方法未必一定在封闭区域内(比如凹角)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-7 01:54:21 | 显示全部楼层
我的思路是这样的:
先在曲线上随便找一点,再沿该点的法线方向左右各按非常小的位移量取两点,其中一点应该在内部。要确定哪一点才是在内部,可以用下面的方法:以其中一点为中心作一个非常小的园,再用该园生成一区域,再将该区域与封闭曲线生成的区域作BOOLEAN运算,运算的结果很容易确定该小园是否在曲线内部。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-7 05:28:01 | 显示全部楼层
5楼: 交点数大于1时, 可能有很多"两个交点"呀, 取哪两个交点的中间?
7楼: 前半截思路可以, 后半截可否这样: OFFSET边界, 面积小的那个点在图形内侧.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-7 06:42:52 | 显示全部楼层
最初由 梦断江南 发布
[B]楼上的方法未必一定在封闭区域内(比如凹角) [/B]

话是没有说完,斑竹这么聪明应该知道办法的。求得交点后要 vl-sort 一次,两个点只要的第一和第二个点,如果第一个是凹角那第二个点和第三个点间肯定在内部(如果有第三个交点的话,只有两个交点时封闭图形不会有凹角,你可以证明下)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-7 07:57:59 | 显示全部楼层
八楼讲的没错
九楼的方法至少有一个例子是不行的,就是一个简单的直角三角形
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-7 08:32:52 | 显示全部楼层
最初由 aidraft 发布
[B]八楼讲的没错
九楼的方法至少有一个例子是不行的,就是一个简单的直角三角形 [/B]

你试过吗?

  1. (defun c:test (/ e1 ll ln lp ms p1 p2 pl up )
  2.   (if (setq e1 (entsel "\n拾取三角形: "))
  3.     (progn
  4.       (vla-getboundingbox
  5.         (setq pl (vlax-ename->vla-object (car e1)))
  6.         'lp
  7.         'up
  8.       )
  9.       (setq ln (vla-addline
  10.                  (setq
  11.                    ms (vla-get-modelspace
  12.                         (vla-get-activedocument (vlax-get-acad-object))
  13.                       )
  14.                  )
  15.                  lp
  16.                  up
  17.                )
  18.       )
  19.       (setq
  20.         ll (vlax-variant-value (vla-intersectwith pl ln acextendnone))
  21.       )
  22.       (vla-delete ln)
  23.       (setq p1 (list (vlax-safearray-get-element ll 0)
  24.                      (vlax-safearray-get-element ll 1)
  25.                      (vlax-safearray-get-element ll 2)
  26.                )
  27.             p2 (list (vlax-safearray-get-element ll 3)
  28.                      (vlax-safearray-get-element ll 4)
  29.                      (vlax-safearray-get-element ll 5)
  30.                )
  31.       )
  32.       (setvar "pdsize" -15)
  33.       (setvar "pdmode" 35)
  34.       (vla-addpoint
  35.         ms
  36.         (vlax-3d-point
  37.           (mapcar '(lambda (x) (/ x 2)) (mapcar '+ p1 p2))
  38.         )
  39.       )
  40.     )
  41.   )
  42.   (princ)
  43. )


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

使用道具 举报

发表于 2004-8-7 08:47:52 | 显示全部楼层
我说的正是“对角线正好和一个边对齐”这种情况,这时点在线上,是不符合楼主要求的。如果在线上也符合要求。这问题本身就不成为一个问题了。随便在线上找一点,下面一句就行了:
(vlax-curve-getStartPoint curve-obj)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-8-7 09:31:06 | 显示全部楼层
很多谢各为楼主的见解。若封闭图形是 如A,W,E,T,K,M,N,H,Y,L形的双线封闭图形中加一点的程序,又有何见解。。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 08:27 , Processed in 0.184336 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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