| 
									
										
										
										
											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+ ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-09 02:38:10 -05:00
										 |  |  | : with-rect-extents ( ..a+b rect1 rect2 loc-quot: ( ..a loc1 loc2 -- ..c ) ext-quot: ( ..b ext1 ext2 -- ..d ) -- ..c+d )
 | 
					
						
							| 
									
										
										
										
											2009-02-05 04:28:41 -05:00
										 |  |  |     [ [ 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 -- )
 | 
					
						
							| 
									
										
										
										
											2010-05-05 16:52:54 -04:00
										 |  |  |     [ [ loc>> ] dip loc<< ] | 
					
						
							|  |  |  |     [ [ dim>> ] dip dim<< ] | 
					
						
							| 
									
										
										
										
											2009-04-29 15:58:55 -04:00
										 |  |  |     2bi ; inline
 | 
					
						
							| 
									
										
										
										
											2009-05-09 21:24:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-18 01:13:37 -04:00
										 |  |  | USE: vocabs.loader | 
					
						
							| 
									
										
										
										
											2009-05-09 21:24:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-18 15:29:24 -04:00
										 |  |  | { "math.rectangles" "prettyprint" } "math.rectangles.prettyprint" require-when |