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

Analytic geometry, ordering vertices of triangle to capture shortes and second sortest sides

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

这是我的做法:让我们取一个边长为 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相对段的长度顺序[第2长,最长,最短]
  3. Return

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

  1. 由于三角形的第三条边不能从其他两条边推导出来,您必须计算三个距离。

  2. 由于这三个点可能需要以六种方式之一进行排列,因此您无法使用 少于三级 的决策树来解决这个问题(两个级别最多可以区分四种情况)。

因此,计算三个距离并使用与此处相同的最佳决策树对它们进行递增排序:(显然它们的 A、B、C 对应于您的距离)。对于树的每一片叶子,确定必须应用的点排列。

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

这样做您将获得最高效的代码。


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