# -*- coding: utf-8 -*- require 'rays/ext' module Rays class Point include Comparable def move_to! (*args) case args.size when 1 then self.x = self.y = args[0] when 2 then self.x, self.y = args when 3 then self.x, self.y, self.z = args else raise ArgumentError end self end def move_to (*args) dup.move_to! *args end def move_by! (*args) case args.size when 1 then self.x += args[0]; self.y += args[0] when 2 then self.x += args[0]; self.y += args[1] when 3 then self.x += args[0]; self.y += args[1]; self.z += args[2] else raise ArgumentError end self end def move_by (*args) dup.move_by! *args end def to_a (dimension = 2) case dimension when 1 then [x] when 2 then [x, y] when 3 then [x, y, z] else raise ArgumentError end end def [] (index) case index when 0 then x when 1 then y when 2 then z else raise IndexError end end def []= (index, val) case index when 0 then self.x = val when 1 then self.y = val when 2 then self.z = val else raise IndexError end end def <=> (o) ret = x <=> o.x; return ret if ret != 0 ret = y <=> o.y; return ret if ret != 0 z <=> o.z end def inspect () "#" end end# Point end# Rays