你如何唯一识别线段?

时间:2014-02-26 21:32:18

标签: math graphics geometry 2d

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

似乎2D线会有一些独特的身份识别方式。像钥匙一样。

所以线[(A,B),(C,D)]与[(C,D),(A,B)]

相同

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

这似乎是数学或图形中的常见问题,但解决方案让我感到厌烦。

1 个答案:

答案 0 :(得分:0)

从数学的角度来看,这看起来像是无向图的问题(而不是有向图)。

对点进行排序是处理这一点的一种方法:它是一种直接的方式,用一个明确选择的值来表示无序边(只要它对所有可能的段都是一致的,那么选择哪个排序都无关紧要)。您确实需要确保将此顺序保持为不变量:在错误排序的边缘中意外滑动可能会导致任何依赖于排序的问题。

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

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


由于您提到图形,请注意双连接边列表通常用于表示三维多面体的边缘。

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