75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Constructs line equastions from a set of polar cords that represent a room
 | |
| 
 | |
| # Invoke python mklines.py <filename>
 | |
| 
 | |
| import csv
 | |
| import sys
 | |
| import math
 | |
| from os.path import exists as file_exists
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     filename = get_filename()
 | |
|     if filename == -1: return -1
 | |
|     if not file_exists(filename):
 | |
|         perr('File does not exist')
 | |
|         return -1
 | |
|     samples_polar = read_csv(filename, remove_header=True)
 | |
|     if not valid_data(samples_polar): # Assumes header is removed
 | |
|         perr('Invalid or corrupt samples')
 | |
|         return -1
 | |
|     x = polarlist_to_cart(samples_polar)
 | |
|     return 0
 | |
| 
 | |
| def read_csv(filename: str, remove_header=False) -> list:
 | |
|     tmp_data = list()
 | |
|     with open(filename, 'r') as csv_file:
 | |
|         reader = csv.reader(csv_file)
 | |
|         for i, row in enumerate(reader):
 | |
|             new_row = list()
 | |
|             if remove_header and i == 0: continue
 | |
|             for i, val in enumerate(row):
 | |
|                 if i == 0: new_row.append(val)
 | |
|                 else: new_row.append(float(val))
 | |
|             tmp_data.append(new_row)
 | |
|     return tmp_data
 | |
| 
 | |
| def get_line_eq(point1, point2)-> tuple:
 | |
|     m = ((point2[1] - point1[1])/(point2[0] - point1[0]))
 | |
|     # y = mx + b
 | |
|     # b = y - mx
 | |
|     # Using p1 to find b
 | |
|     b = point1[1] - (m*point1[0])
 | |
| 
 | |
| def valid_data(samples:list) -> bool:
 | |
|     # Check if we have even number of samples
 | |
|     return len(samples) % 2 == 0
 | |
| 
 | |
| def polarlist_to_cart(polar_points: list):
 | |
|     cart_tmp = list()
 | |
|     for i, polar_point in enumerate(polar_points, 1):
 | |
|         if i % 2 == 0: continue
 | |
|         # We can safely use i - 1 here
 | |
|         p1 = polar_points[i-1]
 | |
|         p2 = polar_points[i]
 | |
|         print(p1, p2)
 | |
|         p1 = polar_to_cart(p1[0],p1[1])
 | |
|         p2 = polar_to_cart(p2[0],p2[1])
 | |
| 
 | |
| 
 | |
| def points_to_straight_line():
 | |
|     pass
 | |
| 
 | |
| def get_filename() -> str:
 | |
|     try:
 | |
|         filename = sys.argv[1]
 | |
|         return filename
 | |
|     except IndexError:
 | |
|         perr('Provide target file name')
 | |
|         return -1
 | |
| 
 | |
| def perr(msg):
 | |
|     print(msg, file=sys.stderr)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     exit(main()) |