本帖最后由 张和平 于 2013-4-21 23:00 编辑
我现在根据【自贡黄明儒】的函数自己稍作改编了一下,得到如下函数中二维坐标排序函数。现在问题来了,我用这个函数获得如下图形中指定点(A,B,C,D,E,F,G,H)的坐标,比如A点可以先获得这个多边形边界的各端点坐标表,然后先按Y从小到大排序后按X从小到大排序获得新点表,读取这个新点表的第一个元素便是A点坐标。
现在分两种情况描述:
1、我手动输入A~H点坐标,形成一个点表(即test1),然后排序,按上述方法能够准确获得各点坐标;
2、我用boundary命令获得边界pline并获得这个pline的各端点坐标形成点表,然后按上述方法,获得的有些点的坐标就不能正确获得了。
不知其中的原因为何。。。请大神们出手帮忙看看,,,
=====自己的分析
请看TEST1的计算结果
- 命令: TEST1
- (1 0)(0 1)(0 3)(1 4)(3 4)(4 3)(4 1)(3 0) ;依次为A\B\C\D\E\F\G\H
复制代码 请看TEST2的结果显示:
- 指定区域内部任意一点:((4.0 3.0) (3.0 3.0) (3.0 4.0) (1.0 4.0) (1.0 3.0) (0.0
- 3.0) (0.0 1.0) (1.0 1.0) (1.0 2.71837e-016) (3.0 1.49376e-016) (3.0 1.0) (4.0
- 1.0))
- (3.0 1.49376e-016)(0.0 1.0) ;应该为A\B
- (0.0 3.0)(1.0 4.0) ;应该为C\D
复制代码 自动获取的点坐标中,和test1的计算结果对比,发现获取的A点坐标是错误的。A\H点的坐标实际上应当为A=(1.0 2.71837e-016),H=(3.0 1.49376e-016),但是YA>YH,按照上述描述的获取A点坐标的方法(先按Y从小到大排序再按X从小到大排序),获取的A点坐标确实为(3.0 1.49376e-016),因此,出现本文问题的原因便是CAD在处理数据上的容差问题,原本YA=YH=0,但是CAD分别赋予了2.71837e-016和1.49376e-016。
那么,避免这样问题的方法是什么呢?能不能设置一个容差呢?两者差小于这个容差时,便认为两者相等。
|