乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 104|回复: 7

AcGeLineSeg3d::intersectWith中的错误

[复制链接]

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2010-5-7 05:39:09 | 显示全部楼层 |阅读模式
嗨,
我使用Autocad已经有几天了,但是我刚刚发现了一个错误。
这是关于函数intersectWith。
如果我得到两个线段,它们有一个共同点,这个函数有时返回true,有时返回false。
下面是一个例子。我得到第一段是[ 300.0 0.0 0.0] [100.0 0.0 0.0],另一段是[0.0差距0.0] [100.0 0.0 0.0]。当我用在区间[0-1]内变化的间隙做一段时间,用比值1/10^10,res有时为真(相交),有时为假(不相交)。
AcGePoint3d pt 1 ADL(0.00000000,0.0000000+gap,0.00000000);
acgepoint 3d pt 1 bdl(100.0000000,0.0000000,0.0000000);
AcGePoint3d pt 2 ADL(300.00000000,0.00000000,0.0000000);
AcGePoint3d pt 2 bdl(100.00000000,0.00000000,0.0000000);
AcGeLineSeg3d lSeg1dl(pt1Adl,pt 1 bdl);
AcGeLineSeg3d lSeg2dl(pt2Adl,pt 2 bdl);
RES = lseg 1 dl . intersect with(lseg 2 dl,ptInsd1,tol);
这很奇怪。我使用tol=0.1的公差,有时是0.01。有人(数学家)能帮我理解这是怎么回事吗?
预先感谢任何帮助

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2010-5-7 06:19:55 | 显示全部楼层
不是错误。
您的线是平行的,因此唯一可能的交点是终点相交的地方。
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2010-5-7 07:12:14 | 显示全部楼层
可能我写得不对。我再说一遍
如果间隙>0,间隙非常小,即使它们在(100:0)中相交,我也不会得到任何交点
之后,从另一个间隙开始,报告线再次相交
我的误解是为什么intersectWith报告在小间隔内没有相交。
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2010-5-7 07:23:59 | 显示全部楼层
关于使用并行测试的想法,这里有一个我写的测试函数。
奇怪,对我来说,它返回不同的结果!有一些情况是报告的线是平行的,同时它们有一个共同点!
请问有人测试一下吗?

bool
my func(acgelineseg 3d x,AcGeLineSeg3d y,AcGeTol tol)
{
acgevector 3d v1 = x . endpoint()。asVector() - x.startPoint()。as vector();
AcGeVector3d v2 = y.endPoint()。asVector() - y.startPoint()。as vector();
acgevector 3d nul vec = acgevector 3d::kid entity;
v1 . normalize();
v2 . normalize();
acgevector 3d sum = v1+v2;
acgevector 3d dif = v1-v2;
AcGeTol zeroTol
zero tol . setequalpoint(0.0);
zero tol . setequalvector(0.0);
if((sum = = nul vec)| |(dif = = nul vec))
返回false

//if(sum . is equal to(nul vec,zeroTol)
回复

使用道具 举报

LE3

10

主题

149

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
189
发表于 2010-5-7 12:49:03 | 显示全部楼层
dif.isEqualTo(nulvec,zeroTol))
//返回true
返回!(v1.isParallelTo(v2,tol));
}
void acgelineseg 3d test::intersection()
{
AcGeTol tell;
double dtold = 0.1
tell . setequalpoint(dtold);
//tell . set equal point(1.0);
tell . setequalvector(dtold);
//tell . setequalvector(0.01);
AcGePoint3d ptInsd1

Adesk::Boolean retdx = Adesk::k true,ret D1 = Adesk::k true;
double deltad = 1e-5,gap = 0.0
无符号long long x=0,NN = 100000
x = NN
while(x -!= 1)
{
acgepoint 3d pt 1 ADL(0.0,0.0+gap,0.0);
AcGePoint3d pt1Bdl(100.0,0.0,0.0);
AcGePoint3d pt2Adl(0.0,0.0,0.0);
AcGePoint3d pt2Bdl(100.0,0.0,0.0);
AcGeLineSeg3d lSeg1dl(pt1Adl,pt 1 bdl);
AcGeLineSeg3d lSeg2dl(pt2Adl,pt 2 bdl);
retdx = lseg 1 dl . intersect with(lseg 2 dl,ptInsd1,tell);
retd1 = myfunc(lSeg1dl,lSeg2dl,tell);
如果((retd1!= retdx))
break;
gap+= deltad;
//pt1Ad.set(pt1Ad.x+gap,pt1Ad.y,pt1ad . z);
//lSeg1d.set(pt1Ad,pt1Bd);
}
CPPUNIT_ASSERT(!x);
x = NN
while(x -!= 1)
{
acgepoint 3d pt 1 ADL(0.00000000,0.0000000+gap,0.0000000);
acgepoint 3d pt 1 bdl(100.0000000,0.0000000,0.0000000);
AcGePoint3d pt 2 ADL(300.00000000,0.00000000,0.0000000);
AcGePoint3d pt 2 bdl(100.00000000,0.00000000,0.0000000);
AcGeLineSeg3d lSeg1dl(pt1Adl,pt 1 bdl);
AcGeLineSeg3d lSeg2dl(pt2Adl,pt 2 bdl);
ret D1 = lseg 1 dl . intersect with(lseg 2 dl,ptInsd1,tell);
retdx = myfunc(lSeg1dl,lSeg2dl,tell);
if(retdx!= ret D1)
break;
gap+= deltad;
//pt1Ad.set(pt1Ad.x+gap,pt1Ad.y,pt1ad . z);
//lSeg1d.set(pt1Ad,pt1Bd);
}
CPPUNIT_ASSERT(!x);
返回;
回复

使用道具 举报

11

主题

85

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
129
发表于 2010-5-8 10:53:17 | 显示全部楼层
没有太多时间玩...做了一个快速测试(A2010),你的代码没有返回任何交集-如果可以的话,稍后会尝试。
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2010-5-11 04:36:32 | 显示全部楼层
没有错误,我贴了一张图片。:生气:
回复

使用道具 举报

LE3

10

主题

149

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
189
发表于 2010-5-11 05:59:40 | 显示全部楼层

谢谢。在我的一个测试中,它会返回不同的结果。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 21:01 , Processed in 0.237981 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表