-
Notifications
You must be signed in to change notification settings - Fork 9
Axis Aligned Bounding Box
Martin Prout edited this page Aug 15, 2015
·
7 revisions
Currently this a convenience class and there may be no simple way of creating a jruby extension without giving up the keyword arguments (availability of required keyword args is what attracted me to create class in first place).
# Axis aligned bounding box
class AABB
attr_reader :center, :extent
def initialize(center:, extent:)
@center = center
@extent = extent
end
def self.from_min_max(min:, max:)
new(center: (min + max) * 0.5, extent: max - min)
end
def position(vec)
return @center = vec unless block_given?
@center = vec if yield
end
def scale(d)
@extent *= d
end
def contains?(vec)
rad = extent * 0.5
return false unless (center.x - rad.x..center.x + rad.x).cover? vec.x
(center.y - rad.y..center.y + rad.y).cover? vec.y
end
end
Here is some example usage:-
# Axis aligned bounding box
class AABB
attr_reader :center, :extent
def initialize(center:, extent:)
@center = center
@extent = extent
end
def self.from_min_max(min:, max:)
new(center: (min + max) * 0.5, extent: max - min)
end
def position(vec)
return @center = vec unless block_given?
@center = vec if yield
end
def scale(d)
@extent *= d
end
def contains?(vec)
rad = extent * 0.5
return false unless (center.x - rad.x..center.x + rad.x).cover? vec.x
(center.y - rad.y..center.y + rad.y).cover? vec.y
end
end