练习用,看起来挺无聊的
------------------------------
5.4 看了镐头书,简化了vertical?和parallel?两个方法
5.5 原来"+"和"-"也是可以直接定义的................
ruby 代码
- class Vector
- attr_reader :x , :y, :mod
- attr_writer :x, :y
- #初始化
- def initialize(x,y)
- @x = x
- @y = y
- @mod = (x**2 + y**2) ** 0.5
- end
- #加
- def +(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- @x += vector.x
- @y += vector.y
- puts "(#@x,#@y)"
- end
- end
- #减
- def -(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- @x -= vector.x
- @y -= vector.y
- puts "(#@x,#@y)"
- end
- end
- #是否平行
- def parallel?(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- puts((vector.x / @x) == (vector.y / @y))
- end
- end
- #与实数的积
- def multiply(number)
- if (number.class == Fixnum) or (number.class == Bignum) or (number.class == Float)
- @x *= number
- @y *= number
- puts "(#@x,#@y)"
- else
- puts "#{number}不是一个数字!"
- end
- end
- #数量积
- def innerproduct(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- puts @x * vector.x + @y * vector.y
- end
- end
- #是否垂直
- def vertical?(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- puts((@x * vector.x + @y * vector.y) == 0)
- end
- end
- #夹角
- def inclination(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- puts Math.acos((@x * vector.x + @y * vector.y) / (@mod * vector.mod))
- end
- end
- #平移
- def translate(vector)
- if vector.class != Vector
- puts "#{vector}不是一个向量!"
- else
- @x += vector.x
- @y += vector.y
- puts "(#@x,#@y)"
- end
- end
- end