#!/usr/bin/python '''For computing line intersections''' from __future__ import division from __future__ import print_function import sys import pprint import lsa_mod def usage(retval): '''Give a usage message''' sys.stderr.write('{}: --help --verbose --mode naive\n'.format(sys.argv[0])) sys.exit(retval) def display(lsa_result): '''Display the results''' intersections = sorted(list(lsa_result.gen_intersections())) for intersection in intersections: assert len(intersection) == 2 print('intersection {}: {}'.format(intersection[0], intersection[1])) overlaps = sorted(list(lsa_result.gen_overlaps())) for overlap in overlaps: assert len(overlap) == 2 print('overlap {}: {}'.format(overlap[0], overlap[1])) def main(): '''Main function - for now, we just do a naive intersection computation''' mode = '' verbose = False while sys.argv[1:]: if sys.argv[1] in ['-h', '--help']: usage(0) elif sys.argv[1] in ['-v', '--verbose']: verbose = True elif sys.argv[1] == '--mode': mode = sys.argv[2] del sys.argv[1] else: sys.stderr.write('{}: Unrecognized option: {}\n'.format(sys.argv[0], sys.argv[1])) usage(1) del sys.argv[1] if not mode: sys.stderr.write('{}: You must give a --mode\n'.format(sys.argv[0])) usage(1) if mode not in [ 'naive' ]: sys.stderr.write('{}: {} is not (yet?) a valid mode\n'.format(sys.argv[0], mode)) usage(1) lines = [] for line in sys.stdin: fields = line.split() float_fields = [ float(field) for field in fields ] vector1 = lsa_mod.Vector(float_fields[0], float_fields[1]) vector2 = lsa_mod.Vector(float_fields[2], float_fields[3]) line = lsa_mod.Line(vector1, vector2, is_segment=True) lines.append(line) if verbose: pprint.pprint(lines) if mode == 'naive': lsa_result = lsa_mod.naive_intersections(lines, verbose) else: sys.stderr.write('{}: Internal error: unexpected mode detected: {}\n'.format(sys.argv[0], mode)) display(lsa_result) main()