如果我有三角形A,B和C的x和y坐标,我想知道{A,B,C}的六个排序中的哪一个将三角形的最短边放在排序的前两个顶点之间,以及最后两个之间的第二个最短边。我知道如何解决这个问题,但不是以一种不笨拙和不优雅的方式解决这个问题。我最喜欢的语言是Ruby,但我尊重所有这些语言。
因此,计算三个距离并使用与此处相同的最佳决策树对它们进行排序:https://stackoverflow.com/a/22112521/1196549(显然它们的A,B,C对应于您的距离)。对于树的每个叶子,确定必须应用的点的排列。
例如,如果确定| AB | <| CA | <| BC |,则必须交换A和B.同样解决所有六种情况。
这样做可以获得最高效的代码。
如果你像我一样完全偏执,你可以组织决策树,以便在两个测试而不是三个测试中检测需要更重排列工作的情况。
以下是我将如何做到这一点:让我们采取一个三角形与边x
,y
和z
,这样l(x) <= l(y) <= l(z)
。然后,让x'
,y'
和z'
分别成为与x
,y
和z
相对的顶点。
您的输出将是y', z', x'
(如果您绘制三角形,您将看到这是达到您要求的顺序)。所以,伪代码看起来像:
a, b, c
的点(x, y)
,计算与每个点相对的段的长度(例如,对于a
,这是段bc
)a, b, c
其对立段的长度这有意义吗?真正的工作是映射到对立点之间的欧氏距离。如果您遇到困难,请使用您的代码更新您的问题,我很乐意帮助您解决问题。