乐筑天下

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

[编程交流] 直线附近的对象

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:15:33 | 显示全部楼层 |阅读模式
大家好,
 
经过长时间的搜索,我在这个论坛上的第一篇帖子。。。
 
我正在尝试编写一个VBA例程,它将返回其他对象附近的对象信息。
 
是否有命令或代码可以帮助我识别直线附近的对象?
这些对象并不总是相交,它们也可能是平行的。
 
谢谢
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:21:20 | 显示全部楼层
我不知道除了IntersectWith之外还有什么这样的函数-因此,如果它们不相交,则必须将IntersectWith与额外代码结合起来
 
在直线上定义一个点,然后以编程方式从该点以0度和您想要检测的距离绘制另一条直线
 
然后使用该新线,并使用该线围绕该点每隔5度从原始点创建一个极轴阵列
 
现在,您有了一组线,可以使用IntersectWith函数进行迭代,以检测任何交点
 
希望有帮助
 
编辑:我附上了一个文件,直观地展示了我的想法
与相交。图纸
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:27:46 | 显示全部楼层
所以Abraxus或任何人,
 
我的以下问题:
 
如何将新创建的行加上我试图查找的行添加到我的selectionset中。
因为我需要两个人都喜欢:LineJustCreated。相交(lineToFind,acExtendnone)
 
我的方向对吗?
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:29:36 | 显示全部楼层
可以说物体总是线性的吗?圆、椭圆、样条线实体肯定会使事情复杂化。更不用说多段线和块插入了。
此外,实体是否与WCS共面(即仅处理二维几何)?
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:37:24 | 显示全部楼层
 
嗯,这幅画是2D的,我只是在找线条,所以万岁!
 
只有直线通常是多段线,我只是不明白为什么这会让事情变得复杂。。。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:42:53 | 显示全部楼层
 
线/线比较只需测试“测试线”到“主线”的两个端点。多段线有更多的端点(顶点)需要测试,以及弧的可能性。
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:47:27 | 显示全部楼层
@肖恩
 
啊,我明白了。
 
可以肯定的是,多段线不是由弧组成的,而且获取多段线的所有顶点及其坐标的功能已经在运行。
 
 
但是现在的问题仍然存在,我不知道如何在另一行的特定范围内选择一行,即使我使用InterectWith,我仍然需要将该行添加到我的选择集。。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:49:05 | 显示全部楼层
针对“一次芳基”测试点(PT)的替代方法:
通过PrimaryLine得到直线的SlopeVector。希腊字母表的第4个字母创建垂直向量
  1. Dim PerpendicularVector (0 To 2) As Double
  2. PerpendicularVector(0) = - SlopeVector(1)  ‘note the negative sign
  3. PerpendicularVector(1) =  SlopeVector(0)
  4. PerpendicularVector(2) =  0.0

然后基于该向量和测试点(PT)创建第二个点
  1. Dim SecondPoint (0 To 2) As Double
  2. SecondPoint(0) = PT(0) + PerpendicularVector(0)  
  3. SecondPoint(1) = PT(1) + PerpendicularVector(1)  
  4. SecondPoint(2) = PT(2) + PerpendicularVector(2)

然后使用PT和SecondPoint创建一条连接线。最后,使用PrimaryLine和Xline调用intersectWith。如果没有交叉口,可能需要进一步测试。
回复

使用道具 举报

13

主题

70

帖子

57

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 22:54:16 | 显示全部楼层
今天,我对我的CollisionDetect代码进行了一些调整,使其更快,它也与这个主题相关
 
首先,请记住,试图在直线“附近”查找其他对象会变得非常复杂,因为即使是具有端点的直线也有可变长度,因此在这种情况下,这一切都取决于如何定义“附近”
 
相反,您需要在直线上定义一个点,以便找到“附近”的物体
 
一旦定义了该点(如我几天前的示例所示),就可以根据阈值创建对象的选择集-有点像半径,但由于必须使用“窗口”或“交叉”来选择其附近的任何固定装置,因此它更像是方形半径,而不是圆形半径
 
然后,一旦你有了所有的信息,你迭代通过选择集,并比较一些关于这些实体与给定点,你想找到它“附近”到。。。您可能可以使用边界框根据直线的端点定义选择集x和y的最小值和最大值(这很简单),但请记住,必须处理的选择集越大,所需时间越长
 
请记住,任何运行时间超过2秒的代码都应该有一个进度条表单(循环中有doevents),这样用户就不会认为他们的计算机已经被执行您的代码锁定了
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:57:16 | 显示全部楼层
谢谢abraxus,
 
我目前正在尝试另一种方式来做我想做的事。
 
但同时还要完成一个项目,该项目必须在本周末之前完成。
这是一个遗憾,因为我可以使用这个代码来加快速度,现在我必须用老式的方式工作更长一点。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 11:24 , Processed in 0.507288 second(s), 72 queries .

© 2020-2025 乐筑天下

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