解析几何,排序三角形的顶点以捕获最短和第二最短边

问题描述 投票:0回答:2

如果我有三角形A,B和C的x和y坐标,我想知道{A,B,C}的六个排序中的哪一个将三角形的最短边放在排序的前两个顶点之间,以及最后两个之间的第二个最短边。我知道如何解决这个问题,但不是以一种不笨拙和不优雅的方式解决这个问题。我最喜欢的语言是Ruby,但我尊重所有这些语言。

computational-geometry euclidean-distance analytic-geometry
2个回答
1
投票
  1. 由于三角形的第三面不能从其他两个推导出来,因此必须计算三个距离。
  2. 由于这三点可能需要以六种方式之一进行置换,因此您无法使用少于三个级别的决策树(两个级别最多可以区分四个案例)来解决这个问题。

因此,计算三个距离并使用与此处相同的最佳决策树对它们进行排序:https://stackoverflow.com/a/22112521/1196549(显然它们的A,B,C对应于您的距离)。对于树的每个叶子,确定必须应用的点的排列。

例如,如果确定| AB | <| CA | <| BC |,则必须交换A和B.同样解决所有六种情况。

这样做可以获得最高效的代码。


如果你像我一样完全偏执,你可以组织决策树,以便在两个测试而不是三个测试中检测需要更重排列工作的情况。


1
投票

以下是我将如何做到这一点:让我们采取一个三角形与边xyz,这样l(x) <= l(y) <= l(z)。然后,让x'y'z'分别成为与xyz相对的顶点。

您的输出将是y', z', x'(如果您绘制三角形,您将看到这是达到您要求的顺序)。所以,伪代码看起来像:

  1. 对于每个具有一些坐标a, b, c的点(x, y),计算与每个点相对的段的长度(例如,对于a,这是段bc
  2. 按照[第二长,最长,最短]的顺序排列a, b, c其对立段的长度
  3. 返回

这有意义吗?真正的工作是映射到对立点之间的欧氏距离。如果您遇到困难,请使用您的代码更新您的问题,我很乐意帮助您解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.