三角不等式なりたたんだろ。
追記
n次元空間にあるn次元ベクトルとそのm次元部分空間にあるm次元ベクトルとの距離。
結構大変だったじゃねーか。
もし本当にこれが解けなくて困ってたんなら2000円ぐらい払って欲しい。
type Vector = Array[(Int, Double)] def distanceWithProjection(p1: Vector, p2: Vector): Double = { def distance(p1: Vector, p2: Vector) = { var d = 0.0 for (i <- 0 to (p1.size - 1)) { val dp = p1(i)._2 - p2(i)._2 d += dp * dp } Math.sqrt(d) } def find(vector: Vector, i: Int): Option[(Int, Double)] = { val filterd = vector filter (v => v._1 == i) if (filterd.size == 1) Some(filterd.head) else None } def projection(from: Vector, to: Vector): Vector = { var vector = Array.fill(to.size)((0,0.0)) for (i <- 0 to (vector.size - 1)) { vector(i) = find(from, to(i)._1) match { case Some(v) => v case None => (0,0.0) } } vector } distance(projection(p1, p2), p2) }
元増田は数学弱いっぽいから、とにかく元増田のコードの処理がしたいってだけだと思う方がいいだろう。擬距離だな。数学的には。 そもそもソシャゲかなんかのパラメータっぽい数字...