【问题标题】:2D Geometry: How to determine the closest surrounding lines given an internal point?2D 几何:如何在给定内部点的情况下确定最近的周围线?
【发布时间】:2018-03-31 17:22:57
【问题描述】:

我希望复制 AutoCAD BOUNDARY 命令提供的功能。给定图形中的 2D 点,我需要找到围绕该点的所有最近的线段。

此图像描绘了一个带有线条的图形和位于线条内的一个点(蓝色方块)。 before boundary command

使用该点运行 AutoCAD 边界命令后,此图像描绘了具有所需输出的同一图形。 after boundary command

autocad 边界命令已找到该点周围最近的线并突出显示它们。我一直在尝试在 C# 中实现相同的结果,而不依赖于 AutoCAD 编辑器命令。我唯一的想法是某种洪水填充算法,但这似乎非常低效且冗长,因为这不应该是一个真正难以解决的问题。

我非常感谢任何可以为我指明正确方向的建议或伪代码。

谢谢

【问题讨论】:

标签: c# geometry 2d autocad


【解决方案1】:

您可以使用 Editor.TraceBoundary() 方法。

public unsafe DBObjectCollection TraceBoundary(Point3d seedPoint, bool detectIslands)

http://www.through-the-interface.typepad.com/through_the_interface/2010/06/tracing-a-boundary-defined-by-autocad-geometry-using-net.html

【讨论】:

  • 感谢您的建议,但不幸的是,我最大的限制是我无法使用任何 AutoCAD 编辑器 API 功能。
【解决方案2】:

您尚未描述您的细分是如何组织的。

从给定点沿水平方向构建一条射线,找到第一个相交的线段。获取该段的上端并按顺时针顺序确定第一个相邻段。继续该段的第二端,依此类推,直到再次遇到第一段。

【讨论】:

  • 线段根本没有组织或分组。谢谢你的建议,我试试看。
  • 但他们的结局应该一致。
  • 是的,我已经对线段进行了预处理,以确保它们的末端重合。
  • 好的,所以也许你已经在段之间建立了配对/邻接关系,沿着封闭路径遍历是很容易的任务。
【解决方案3】:

边界命令的作用是在一个封闭的多边形内找到一个二维点。有许多算法涵盖了这个(see here)。 但是,因为您说您的行没有分组,所以您必须将其分为两个步骤。 第一步是检测一条线是否是多边形形状的一部分,并将所有这些多边形存储在您的数据中。接下来是找到属于多边形形状的最近线。一旦你发现你已经找到了你的解决方案。 为了找到一个点的最近线段,一个简单的搜索会得到很多结果。

祝你好运

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2012-10-24
    • 2013-12-25
    • 2012-12-12
    • 2011-01-10
    • 2022-11-09
    相关资源
    最近更新 更多