たのしいRuby 第19章後半 演算子の定義
そういえば、後半戦が残っていた。
2次元ベクトルVectorを定義して演算子の定義を学習する。サンプルに、内積Oと外積Xを追加してみた。
#!/usr/bin/ruby class Vector attr_reader :x, :y def initialize(x=0.0, y=0.0) @x, @y = x, y end def inspect "(#{@x}, #{@y})" end def +(v) Vector.new(@x + v.x, @y + v.y) end def -(v) Vector.new(@x - v.x, @y - v.y) end def +@ self.dup end def -@ Vector.new(-@x, -@y) end # 90度回転 def ~@ Vector.new(-@y, @x) end # 内積 def O(v) @x * v.x + @y * v.y end # 外積(x方向のスカラー) def X(v) @x * v.y - v.x * @y end end p v1 = Vector.new( 2.0, 2.0) puts "==90度づつ回転" p v2 = ~v1 p v3 = ~v2 p v4 = ~v3 puts "==内積" p v1.O(v2) #=> 0.0 直交 p v1.O(v3) #=> -8.0 逆方向 p v1.O(v4) #=> 0.0 直交 puts "==外積" p v1.X(v2) #=> 8.0 直交 p v1.X(v3) #=> 0.0 逆方向 p v1.X(v4) #=> -8.0 直交だけど、正負が逆。