argius note

プログラミング関連

長方形の交差判定 (2)

復習がてら、Ruby版。

class Rectangle
  attr_reader :left, :top, :right, :bottom
  def initialize(left, top, right, bottom)
    @left, @top, @right, @bottom = left, top, right, bottom
  end
  def valid?
    left < right and top < bottom
  end
end

def overlap? (r1, r2)
  Rectangle.new([r1.left, r2.left].max,
                [r1.right, r2.right].min,
                [r1.top, r2.top].max,
                [r1.bottom, r2.bottom].min).valid?
end

def checkOverlap (r1, r2)
  if !r1.valid? or !r2.valid?
    puts "r1 or r2 is not valid"
  else
    puts overlap?(r1, r2) ? "overlapped" : "not overlapped"
  end
end

checkOverlap(Rectangle.new(0, 10, 10, 100), Rectangle.new(0, 10, 10, 100))
checkOverlap(Rectangle.new(0, 10, 10, 101), Rectangle.new(0, 10, 10, 100))
checkOverlap(Rectangle.new(10, 10, 150, 150), Rectangle.new(175, 15, 180, 130))
$ ./check.rb
overlapped
overlapped
not overlapped
$