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

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

我有以下代码用于计算欧几里得距离:

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

谁能阐明为什么我得到这个结果?

编辑:

Per Patashu和ntalbs,两点之间的欧几里得距离的正确代码是:

distanceBetween(first:(Double,Double), second:(Double,Double)): Double = {
   scala.math.sqrt( scala.math.pow(second._1 - first._1, 2) + scala.math.pow(second._2 - first._2, 2) ) //distance formula
}
scala formula euclidean-distance
2个回答
5
投票

您忘了将绝对值包装在减法周围。负数的sqrt为NaN。

编辑:我很傻。您可能打算做欧几里德距离,即sqrt((x2-x1)^ 2 +(y2-y1)^ 2),而不是abs。

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


4
投票

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

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