HelloPhysicsWorld->vecmath-ruby->chapter2

で、実装中^^


 Point2クラスの実装中に、distance系のメソッドが複数有ることに気づく。
通常のPoint2#distance*1以外に、
Point2#distance_L1*2とPoint2#distance_Linf*3の2種類あるようです。

 で、なんだこりゃって事で、調べてみましょ。

    class Point2
      include Tuple2

      alias_method :px, :x
      alias_method :py, :y

      def distance_squared point
        (@x-point.px)**2 + (@y-point.py)**2
      end
      
      def distance point
        sqrt(distance_squared(point))
      end
      
      def distance_L1 point
        (@x-point.px).abs + (@y-point.py).abs
      end

      def distance_Linf point
        [(@x-point.px).abs, (@y-point.py).abs].max
      end
    end

wikiってみるとマンハッタン距離 - Wikipediaって記事が。


Point2#distance_L1はn次元における座標軸にそった距離との事*4

d_1(\mathbf{x},\mathbf{y})=\sum_{k=1}^n|x_k-y_k|

もう一寸調べてみるとLp space - Wikipediaも発見


 で、Point2#distance_Linfとはなんだろうか?
使いどころが見えない。

*1:自乗平均で普通2点間の距離ってこれでしょ

*2:各成分の差の絶対値を和

*3:各成分の差の絶対値で最大値

*4:2次元に限定されないようですね