找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6751|回复: 30

[求助] 两条曲线,如果能构成封闭区域,如何求他们的交,差,并

[复制链接]
发表于 2002-11-26 22:46:54 | 显示全部楼层 |阅读模式

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

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

×
如题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-26 23:19:18 | 显示全部楼层
两个封闭区域之间的交叉我可以理解,但是并我不是很明白,如何并,具体如何变化,请说明?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-26 23:42:07 | 显示全部楼层
上面朋友问的,我想是下面演示的,下面是晓东工具箱-曲线-曲线布尔工具的演示。

大家讨论讨论,用ARX实现的方法。


下载地址:http://www.xdcad.net/tech/xd_tbox/xdtb_cboole.swf

<embed src=http://www.xdcad.net/tech/xd_tbox/xdtb_cboole.swf quality=high width=512 height=482 loop=true type="application/x-shockwave-flash">
</embed>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2002-11-29 18:34:45 | 显示全部楼层
不明白,这主要用在什么方面,平面上用修翦命令也可以,主要区别在哪儿。如用在3D或其他方面。烦请说明一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-29 18:53:36 | 显示全部楼层
最初由 jhwjm369 发布
[B]不明白,这主要用在什么方面,平面上用修翦命令也可以,主要区别在哪儿。如用在3D或其他方面。烦请说明一下。 [/B]


这个是自己写ACAD 点过虑边界 BOUNDARY 命令 的基础。

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

使用道具 举报

发表于 2002-11-30 12:02:32 | 显示全部楼层
看了你的演示,都是凸多边形的运算,没有涉及到凹多边形和复杂多边形(自相交),其中复杂多边形可能要先进行预处理,将其分割.一般的方法是将两多边形的坐标按X\Y方向排序分治,然后求交,再构成新的多边形.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-30 17:01:43 | 显示全部楼层

效率问题

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-30 17:14:20 | 显示全部楼层

Re: 效率问题

最初由 夜语 发布
[B]XD:不知道你的方法对相当复杂的图形(例如地形图)的处理
时间会不会较长? [/B]


用ARX,应该是比用其他语言更快了。

使用AcGeInterval 肯定也是ADESK BOUNDARY 命令的基础。ADESK的命令都是用ARX写出来的。

至于效率上,在ARX基础上,当然大家可以讨论讨论,相应的算法,让执行的更快些。

由于ADESK自己维护了一个“显示表”数据结构,获得显示屏幕上的实体,ADS_SSGET 除了X 选项外,其他的参数都是使用了“distplay list " ,所以用ads_ssget 先获得屏幕内实体进行处理,是提供效率的关键。

判断每个曲线(包括快内曲线)的轮廓,然后判断包括该点的最小轮廓,这个地方应该是体验算法效率的地方。

核心的地方:

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

使用道具 举报

发表于 2002-11-30 17:29:15 | 显示全部楼层
不知道AcGeCurve2d::intersectWith()和AcGeInterval::intersectWith()有何区别,是否几何类的求交函数会比实体类的求交函数快些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-30 17:35:50 | 显示全部楼层
最初由 hothua 发布
[B]看了你的演示,都是凸多边形的运算,没有涉及到凹多边形和复杂多边形(自相交),其中复杂多边形可能要先进行预处理,将其分割.一般的方法是将两多边形的坐标按X\Y方向排序分治,然后求交,再构成新的多边形. [/B]


贴个复杂多边线,有自交的,有凹凸的演示


下载地址:http://www.xdcad.net/tech/xd_tbox/xdtb_cboole1.swf

<embed src=http://www.xdcad.net/tech/xd_tbox/xdtb_cboole1.swf quality=high width=512 height=482 loop=true type="application/x-shockwave-flash">
</embed>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-30 17:46:41 | 显示全部楼层
最初由 夜语 发布
[B]不知道AcGeCurve2d::intersectWith()和AcGeInterval::intersectWith()有何区别,是否几何类的求交函数会比实体类的求交函数快些。 [/B]


AcGeCurve2d::intersectWith 是求两条几何曲线实体的”交点“,求的是线的”交点“

AcGeInterval::intersectWith 求的是两条几何曲线”域“的交,是”交“的曲线的返回参数的范围,这个域可以是全部曲线,也可以给定参数,求曲线部分”域“的交。

上面两个函数作用是不同的。

同样情况下,几何类提供的是数学模型上的算法,几何类对象不包括实体类的”层“,”ID“,”线型“,”颜色“等等AcDbEntity类的属性,更不包括上层的AcDbObject 类更多的属性。所以从内存占用角度这一个方面来说,速度和效率,几何实体肯定要比数据库实体效率高。因为它仅仅是数学运算。

还有,数据库实体提供的图形学算法要比相应的几何类要少的多。
比如AcDbCurve 和对应的AcGeCurve2d,3d 比。

另外,数据库实体肯定是用不了AcGeInterval 这个类的。

而几何实体AcGeCurve2d,3d可以通过下面的AcGeCurve2d::getInterval(...) 得到更多的几何实体运算方法。比如还有实用的AcGeBoundBlock2d,AcGeBoundBlock3d 类,可以算矩形包围盒,也可以算实际包围盒等等。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-30 18:02:19 | 显示全部楼层
最初由 夜语 发布
[B]AcGeInterval如何转为实体呢? [/B]


如果你要操作的是数据库实体的话:

1、AcDbCurve ==> AcGeCurve2d,3d
2、AcGeCurve2d::getInterval(...) 得到AcGeInterval 对象
3、两个这样的几何曲线的AcGeInterval 对象,比如用 AcGeInterval::getMerge(..) 求”域“并”

  1. [font=courier]
  2. AcGeInterval::getMerge Function void

  3. getMerge(

  4. const AcGeInterval& otherInterval,

  5. AcGeInterval& result) const;

  6. otherInterval Input interval with which to merge
  7. result Output merged interval

  8. The output argument result returns the smallest i
  9. nterval that contains both this interval and the interval otherInterval.

  10. [/font]


得到的并的结果的AcGeInterval 对象引用 result

4、下面我们看看AcGeInterval 类的查询方法:

  1. [font=courier new]
  2. AcGeInterval::getBounds Function void

  3. getBounds(

  4. double& lower,

  5. double& upper) const;

  6. lower Output lower bound
  7. upper Output upper bound

  8. Returns lower and upper bounds of this interval in the output arguments lower and upper respectively.
  9. The bound has a meaningful value only if this interval is bounded in the corresponding direction.

  10. [/font]


上面得到的结果两个double 类型 lower,upper 对应的就是 result 范围的最小参数值和最大参数值(就是我们熟悉的AcDbCurve 类下面的 param )。

5、这样,我们就得到了我们要的两条几何曲线实体的“并”的范围的 最小参数和最大参数,反过去对应我们操作的两天几何曲线的范围,下面我们就可以把:

AcGeCurve2d,3d 根据参数范围 ==>  AcDbCurve

(并的结果,可能有两个范围,这个我们自己判断)

6、把AcDbCurve 添加到数据库中,我们就得到了两条DB曲线的“域”的并。

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

使用道具 举报

发表于 2002-11-30 18:19:42 | 显示全部楼层
ARX带的一些求交的几何运算函数对搞设计的可能比较适合,数据量不会很大,对于GIS\,地图来说,那些求交的方法写的程序我想没有人能够有耐心等待程序执行完成
对于GIS,将矢量数据栅格化,找出可能相关的曲线,再用矢量算法进行精确判断是比较好的办法,不过对内存大小要求较高,以目前硬件配置来说不会有问题.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 10:18 , Processed in 0.435258 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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