2009-02-05 04:28:41 -05:00
|
|
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-04-29 15:58:55 -04:00
|
|
|
USING: kernel arrays sequences math math.vectors accessors
|
2009-05-09 21:24:17 -04:00
|
|
|
parser ;
|
2009-02-05 04:28:41 -05:00
|
|
|
IN: math.rectangles
|
|
|
|
|
|
|
|
TUPLE: rect { loc initial: { 0 0 } } { dim initial: { 0 0 } } ;
|
|
|
|
|
|
|
|
: <rect> ( loc dim -- rect ) rect boa ; inline
|
|
|
|
|
2009-10-28 14:38:27 -04:00
|
|
|
SYNTAX: RECT: scan-object scan-object <rect> suffix! ;
|
2009-04-29 15:58:55 -04:00
|
|
|
|
2009-02-05 04:28:41 -05:00
|
|
|
: <zero-rect> ( -- rect ) rect new ; inline
|
|
|
|
|
|
|
|
: point>rect ( loc -- rect ) { 0 0 } <rect> ; inline
|
|
|
|
|
|
|
|
: rect-bounds ( rect -- loc dim ) [ loc>> ] [ dim>> ] bi ;
|
|
|
|
|
|
|
|
: rect-extent ( rect -- loc ext ) rect-bounds over v+ ;
|
|
|
|
|
2009-05-08 16:07:15 -04:00
|
|
|
: rect-center ( rect -- center ) rect-bounds 2 v/n v+ ;
|
|
|
|
|
2009-02-05 04:28:41 -05:00
|
|
|
: with-rect-extents ( rect1 rect2 loc-quot: ( loc1 loc2 -- ) ext-quot: ( ext1 ext2 -- ) -- )
|
|
|
|
[ [ rect-extent ] bi@ ] 2dip bi-curry* bi* ; inline
|
|
|
|
|
|
|
|
: <extent-rect> ( loc ext -- rect ) over [v-] <rect> ;
|
|
|
|
|
|
|
|
: offset-rect ( rect loc -- newrect )
|
|
|
|
over loc>> v+ swap dim>> <rect> ;
|
|
|
|
|
|
|
|
: (rect-intersect) ( rect rect -- array array )
|
|
|
|
[ vmax ] [ vmin ] with-rect-extents ;
|
|
|
|
|
|
|
|
: rect-intersect ( rect1 rect2 -- newrect )
|
|
|
|
(rect-intersect) <extent-rect> ;
|
|
|
|
|
|
|
|
GENERIC: contains-rect? ( rect1 rect2 -- ? )
|
|
|
|
|
|
|
|
M: rect contains-rect?
|
|
|
|
(rect-intersect) [v-] { 0 0 } = ;
|
|
|
|
|
|
|
|
GENERIC: contains-point? ( point rect -- ? )
|
|
|
|
|
|
|
|
M: rect contains-point?
|
|
|
|
[ point>rect ] dip contains-rect? ;
|
|
|
|
|
|
|
|
: (rect-union) ( rect rect -- array array )
|
|
|
|
[ vmin ] [ vmax ] with-rect-extents ;
|
|
|
|
|
|
|
|
: rect-union ( rect1 rect2 -- newrect )
|
|
|
|
(rect-union) <extent-rect> ;
|
2009-02-05 23:29:15 -05:00
|
|
|
|
|
|
|
: rect-containing ( points -- rect )
|
|
|
|
[ vsupremum ] [ vinfimum ] bi
|
|
|
|
[ nip ] [ v- ] 2bi <rect> ;
|
2009-02-15 05:01:57 -05:00
|
|
|
|
|
|
|
: rect-min ( rect dim -- rect' )
|
2009-02-16 00:39:27 -05:00
|
|
|
[ rect-bounds ] dip vmin <rect> ;
|
|
|
|
|
|
|
|
: set-rect-bounds ( rect1 rect -- )
|
|
|
|
[ [ loc>> ] dip (>>loc) ]
|
|
|
|
[ [ dim>> ] dip (>>dim) ]
|
2009-04-29 15:58:55 -04:00
|
|
|
2bi ; inline
|
2009-05-09 21:24:17 -04:00
|
|
|
|
|
|
|
USING: vocabs vocabs.loader ;
|
|
|
|
|
2009-10-28 14:38:27 -04:00
|
|
|
"prettyprint" vocab [ "math.rectangles.prettyprint" require ] when
|