【问题标题】:How do you Uniquely Identify a line segment?您如何唯一地识别线段?
【发布时间】:2014-02-26 21:32:17
【问题描述】:

我正在解决一个问题,以消除路径集合中的公共线段。其中许多路径共享同一段。

似乎 2D 线可以通过某种方式来唯一标识自身。像一把钥匙。

所以一条线 [(A,B), (C,D)] 与 [(C,D), (A,B)] 相同

我能想出的唯一解决方案是对分数进行排序。

这似乎是数学或图形中的常见问题,但解决方案却让我无法理解。

【问题讨论】:

  • 您会生成这些细分吗?在它们“相同”之前,它们可以有多接近?

标签: math graphics geometry 2d


【解决方案1】:

从数学的角度来看,这看起来像是一个无向图(与有向图相反)。

对点进行排序是处理此问题的一种方法:这是一种用单个、明确选择的值表示无序边的简单方法(您选择什么排序无关紧要,只要它对于所有可能的段都是一致的)。您确实需要确保将此排序保持为不变量:意外滑入排序错误的边缘可能会导致依赖于排序的任何事物出现问题。

但是,从数学上讲,无向图通常被定义为具有对称性的有向图:如果 (A,B) 是边,则 (B,A) 也是边。这暗示了另一种方式:确保您始终存储 both (A,B) 和 (B,A)。也许两个段排序都可以链接到任何公共数据,并且可能是从另一个访问一个的快速方法。 (与排序点方法一样,您需要将这种对称性保持为不变量。)

最佳选择取决于您的应用。如果您将细分用作键,则排序方法可能是最好的。然而,一些应用更适合对称方法。例如,doubly connected edge list 是一种数据结构,它将每条边表示为两个链接的“半边”,每个方向一个。


由于您提到了图形,请注意双向连接边列表通常用于表示 3-D 多面体的边。

另外,请注意与定向三角形的相似之处:计算机图形学将三角形视为“单面”有很好的实际原因,因此从一侧绘制可见的三角形与从另一侧绘制可见的相同三角形是不同的。其他。与半边一样,这种区别由顶点的顺序决定:一侧为顺时针,另一侧为逆时针。

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2018-08-09
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多