room_scan_sim/mklines.py

64 lines
1.8 KiB
Python
Raw Normal View History

2022-01-25 19:48:48 +01:00
# 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
2022-01-30 17:33:46 +01:00
from basictypes import PointWithID, StraightLine, point_from_polar
2022-01-25 19:48:48 +01:00
def main():
filename = get_filename()
if filename == -1: return -1
if not file_exists(filename):
perr('File does not exist')
return -1
points = read_csv(filename, remove_header=True)
if not valid_data(points): # Assumes header is removed
2022-01-25 19:48:48 +01:00
perr('Invalid or corrupt samples')
return -1
2022-01-30 17:33:46 +01:00
#for val in points: print(val.get_cartesian())
lines = set()
for i in range(0, len(points), 2):
p1 = points[i]
p2 = points[i+1]
print('p1 ', p1.get_x(), p1.get_y())
print('p2 ', p2.get_x(), p2.get_y())
line = StraightLine(p1, p2)
lines.add(line)
print('line ', line.get_m(), line.get_b())
#for line in lines: print(line.get_m())
2022-01-25 19:48:48 +01:00
return 0
def read_csv(filename: str, remove_header=False) -> list[PointWithID]:
tmp_data = list() # New list of points (PointWithID)
2022-01-25 19:48:48 +01:00
with open(filename, 'r') as csv_file:
reader = csv.reader(csv_file)
for i, row in enumerate(reader):
if remove_header and i == 0: continue # Skip header
# Assumes wall_id,r,theta
point_tmp = point_from_polar(float(row[1]), float(row[2]), row[0])
tmp_data.append(point_tmp)
2022-01-25 19:48:48 +01:00
return tmp_data
def valid_data(samples:list) -> bool:
2022-01-30 17:33:46 +01:00
# Check if we have an even number of samples
2022-01-25 19:48:48 +01:00
return len(samples) % 2 == 0
def get_filename() -> str:
try:
filename = sys.argv[1]
return filename
except IndexError:
perr('Provide target file name')
return -1
def perr(*args):
print(*args, file=sys.stderr)
2022-01-25 19:48:48 +01:00
if __name__ == '__main__':
exit(main())