mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Initial revision
This commit is contained in:
		
							parent
							
								
									df79a1ee19
								
							
						
					
					
						commit
						c636014c43
					
				
					 47 changed files with 5492 additions and 0 deletions
				
			
		
							
								
								
									
										87
									
								
								Lib/lib-stdwin/rect.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								Lib/lib-stdwin/rect.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | |||
| # Module 'rect'. | ||||
| # | ||||
| # Operations on rectangles. | ||||
| # There is some normalization: all results return the object 'empty' | ||||
| # if their result would contain no points. | ||||
| 
 | ||||
| 
 | ||||
| # Exception. | ||||
| # | ||||
| error = 'rect.error' | ||||
| 
 | ||||
| 
 | ||||
| # The empty rectangle. | ||||
| # | ||||
| empty = (0, 0), (0, 0) | ||||
| 
 | ||||
| 
 | ||||
| # Check if a rectangle is empty. | ||||
| # | ||||
| def is_empty((left, top), (right, bottom)): | ||||
| 	return left >= right or top >= bottom | ||||
| 
 | ||||
| 
 | ||||
| # Compute the intersection or two or more rectangles. | ||||
| # This works with a list or tuple argument. | ||||
| # | ||||
| def intersect(list): | ||||
| 	if not list: raise error, 'intersect called with empty list' | ||||
| 	if is_empty(list[0]): return empty | ||||
| 	(left, top), (right, bottom) = list[0] | ||||
| 	for rect in list[1:]: | ||||
| 		if not is_empty(rect): | ||||
| 			(l, t), (r, b) = rect | ||||
| 			if left < l: left = l | ||||
| 			if top < t: top = t | ||||
| 			if right > r: right = r | ||||
| 			if bottom > b: bottom = b | ||||
| 			if is_empty((left, top), (right, bottom)): | ||||
| 				return empty | ||||
| 	return (left, top), (right, bottom) | ||||
| 
 | ||||
| 
 | ||||
| # Compute the smallest rectangle containing all given rectangles. | ||||
| # This works with a list or tuple argument. | ||||
| # | ||||
| def union(list): | ||||
| 	(left, top), (right, bottom) = empty | ||||
| 	for (l, t), (r, b) in list[1:]: | ||||
| 		if not is_empty((l, t), (r, b)): | ||||
| 			if l < left: left = l | ||||
| 			if t < top: top = t | ||||
| 			if r > right: right = r | ||||
| 			if b > bottom: bottom = b | ||||
| 	res = (left, top), (right, bottom) | ||||
| 	if is_empty(res): | ||||
| 		return empty | ||||
| 	return res | ||||
| 
 | ||||
| 
 | ||||
| # Check if a point is in a rectangle. | ||||
| # | ||||
| def pointinrect((h, v), ((left, top), (right, bottom))): | ||||
| 	return left <= h < right and top <= v < bottom | ||||
| 
 | ||||
| 
 | ||||
| # Return a rectangle that is dh, dv inside another | ||||
| # | ||||
| def inset(((left, top), (right, bottom)), (dh, dv)): | ||||
| 	left = left + dh | ||||
| 	top = top + dv | ||||
| 	right = right - dh | ||||
| 	bottom = bottom - dv | ||||
| 	r = (left, top), (right, bottom) | ||||
| 	if is_empty(r): | ||||
| 		return empty | ||||
| 	else: | ||||
| 		return r | ||||
| 
 | ||||
| 
 | ||||
| # Conversions between rectangles and 'geometry tuples', | ||||
| # given as origin (h, v) and dimensions (width, height). | ||||
| # | ||||
| def rect2geom((left, top), (right, bottom)): | ||||
| 	return (left, top), (right-left, bottom-top) | ||||
| 
 | ||||
| def geom2rect((h, v), (width, height)): | ||||
| 	return (h, v), (h+width, v+height) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum