geometry :: Boxed :: defaultinit
geometry :: Boxed :: intersects
Doesself
intersect with other
?
core :: Object :: class_factory
Implementation used byget_class
to create the specific class.
geometry :: Boxed :: defaultinit
core :: Object :: defaultinit
geometry :: Boxed :: intersects
Doesself
intersect with other
?
core :: Object :: is_same_instance
Return true ifself
and other
are the same instance (i.e. same identity).
core :: Object :: is_same_serialized
Isself
the same as other
in a serialization context?
core :: Object :: is_same_type
Return true ifself
and other
have the same dynamic type.
core :: Object :: output_class_name
Display class name on stdout (debug only).
# An 2d abstract bounded object
interface Boxed[N: Numeric]
# Left bound
#
# require: left <= right
fun left: N is abstract
# Right bound
#
# require: right >= left
fun right: N is abstract
# Top bound
#
# require: top >= bottom
fun top: N is abstract
# Bottom bound
#
# require: bottom <= top
fun bottom: N is abstract
# Is `other` contained within `self`?
#
# var a = new Box[Int].lbwh(1, 1, 4, 4)
# var b = new Box[Int].lbwh(2, 2, 2, 2)
# var c = new Box[Int].lbwh(0, 2, 8, 2)
# assert a.contains(b)
# assert not b.contains(a)
# assert c.contains(b)
# assert not b.contains(c)
# assert not a.contains(c)
# assert not c.contains(a)
fun contains(other: Boxed[N]): Bool
do
return self.top >= other.top and self.bottom <= other.bottom and
self.left <= other.left and self.right >= other.right
end
# Does `self` intersect with `other`?
#
# var a = new Box[Int].lbwh(0, 0, 2, 2)
# var b = new Box[Int].lbwh(1, 1, 8, 2)
# var c = new Box[Int].lbwh(3, 0, 2, 8)
# assert a.intersects(b)
# assert b.intersects(a)
# assert b.intersects(c)
# assert c.intersects(b)
# assert not c.intersects(a)
# assert not a.intersects(c)
fun intersects(other: Boxed[N]): Bool
do
return self.left <= other.right and other.left <= self.right and
self.top >= other.bottom and other.top >= self.bottom
end
# Create a bounding box that encloses the actual bounding box.
# `dist` is the distance between the inner boundaries and the outer boundaries.
# ~~~
# var p = new Point[Int](5,10)
# var b = p.padded(3)
# assert b.left == 2 and b.right == 8 and b.top == 13 and b.bottom == 7
# ~~~
fun padded(dist: N): Box[N] do return new Box[N].lrtb(left - dist, right + dist, top + dist, bottom - dist)
redef fun to_s do return "<{class_name} left: {left}, right: {right}, top: {top}, bottom: {bottom}>"
end
lib/geometry/boxes.nit:22,1--88,3