为什么这种距离公式方法给我NaN?

时间:2013-05-09 01:37:21

标签: scala

我有以下代码:

distanceBetween(first:(Double,Double), second:(Double,Double)): Double = {
   math.sqrt((first._1 - second._1) + (first._2 - second._2)) //distance formula
}

当我在Scala解释器中运行它时,我得到了这个结果:

distanceBetween((0.0,0.0),(20.0,20.0))

res0: Double = NaN

任何人都能明白为什么我会得到这个结果吗?

2 个答案:

答案 0 :(得分:5)

你忘了在减法周围包装绝对值。负数的sqrt是NaN。

编辑:我很蠢。你可能想要做欧氏距离,即sqrt((x2-x1)^ 2 +(y2-y1)^ 2),平方而不是abs。

(如果你打算做出租车距离,如果只能水平和垂直移动,也就是距离,那就是abs(x2-x1)+ abs(y2-y1)。)

答案 1 :(得分:4)

也许您想检查计算2D中两点之间距离的公式:

d = sqrt((x2-x1)^2 + (y2-y1)^2)

使用此公式,sqrt()内部永远不会为负数。因此代码应如下所示:

def distanceBetween(first:(Double,Double), second:(Double,Double)): Double = {
  val dx = second._1 - first._1
  val dy = second._2 - first._2
  math.sqrt(dx*dx + dy*dy)
}