diff --git a/naut.py b/naut.py old mode 100644 new mode 100755 index ed7ed1a..fb6d27b --- a/naut.py +++ b/naut.py @@ -1,5 +1,4 @@ -# !/usr/bin/python - +#! /usr/bin/python from math import radians, cos, sin, asin, sqrt import numpy as np @@ -9,21 +8,20 @@ import time import json from time import strftime import random +import os +import argparse # haversine function to determine distance between two lat,long points - - def haversine(lat1, lon1, lat2, lon2): R = 3959.87433 # earth radius in miles dLat = radians(lat2 - lat1) dLon = radians(lon2 - lon1) - a = sin(dLat/2)**2 + cos(lat1)*cos(lat2)*sin(dLon/2)**2 - c = 2*asin(sqrt(a)) - return R*c + a = sin(dLat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dLon / 2) ** 2 + c = 2 * asin(sqrt(a)) + return R * c + # get a random enough number - - def getfloat(): output = random.random() return output @@ -34,27 +32,24 @@ def str_time_prop(start, end, format, prop): stime = start etime = end ptime = stime + prop * (etime - stime) - return time.strftime(format, time.localtime(ptime)) + # get random time in the future - - def random_date(start, end, prop): - return str_time_prop(start, end, '%m/%d/%Y %I:%M%p', prop) + return str_time_prop(start, end, "%m/%d/%Y %I:%M%p", prop) + # function to generate a lat,long coordinate within a range # inspiration from this post: # https://gis.stackexchange.com/questions/25877/generating-random-locations-nearby - - def create_random_point(x0, y0, distance): # approximately 1609 meters in a mile # 5 miles = about 8045 # 111300 = meters in a degree # 69 = miles in a degree r = distance / 111300 - r = r/2 + r = r / 2 u = float(getfloat()) v = float(getfloat()) w = r * np.sqrt(u) @@ -62,9 +57,37 @@ def create_random_point(x0, y0, distance): x = w * np.cos(t) x1 = x / np.cos(y0) y = w * np.sin(t) - print("u="+str(u)) - print("v="+str(v)) - return (x0+x1, y0+y) + return (x0 + x1, y0 + y) + + +def spooky_print(message): + for character in message: + print(character, end="", flush=True) + time.sleep(0.3) + print("\n") + + +def white_rabbit(future_time, latitude, longitude): + # homage to the Matrix + init1_msg = "Wake up, Neo..." + init_msg = "The Matrix has you..." + rabbit_msg1 = "follow the" + rabbit_msg2 = "white rabbit..." + + os.system("clear") + spooky_print(init1_msg) + time.sleep(5) + os.system("clear") + spooky_print(init_msg) + time.sleep(5) + os.system("clear") + spooky_print(rabbit_msg1) + spooky_print(" " + rabbit_msg2) + time.sleep(5) + os.system("clear") + spooky_print(" " + future_time) + spooky_print(" " + latitude) + spooky_print(" " + longitude) init_start = time.time() @@ -73,67 +96,89 @@ newplot = () ##### User defined variables ##### -loghandle = './naut.log' +loghandle = "./naut.log" logfile = open(loghandle, "a") -# home_base (starting point), set to Warsaw center. -latitude1, longitude1 = 52.229832, 21.011734 +parser = argparse.ArgumentParser() -#window_secs = 10800 -window_secs = 1800 +parser.add_argument("-x", "--matrix", action="store_true", help="toggle the matrix") +parser.add_argument( + "-c", + "--coordinates", + nargs=2, + action="append", + help="enter lat and long for home base, defaults to 52.229832 21.011734", +) +parser.add_argument( + "-t", "--window", type=int, help="set the time window in minutes, defaults to 30" +) +parser.add_argument( + "-m", + "--distance", + type=int, + help="set the radius from home base in meters, defaults to 4827", +) + +args = parser.parse_args() + +# home_base (starting point), set to Warsaw center. +if args.coordinates: + latitude1, longitude1 = float(args.coordinates[0][0]), float(args.coordinates[0][1]) +else: + latitude1, longitude1 = 52.229832, 21.011734 + +if args.window: + window_secs = args.window * 60 +else: + window_secs = 1800 # how far to travel in meters from home base -meters_out = 4827 +if args.distance: + meters_out = args.distance +else: + meters_out = 4827 ##### End User Defined variables ##### current_time = time.time() window = current_time + window_secs -# for loop to get multiple points if desired (for future development - void/attractor calculations) -for i in range(1, 2): - timex = float(getfloat()) - x, y = create_random_point(latitude1, longitude1, meters_out) - future_time = random_date(current_time, window, timex) - dest_lat = str(format(x, '.5f')) - dest_long = str(format(y, '.5f')) - orig_lat = str(latitude1) - orig_long = str(longitude1) - newplot = (x, y) - origplot = (latitude1, longitude1) - dist = haversine(origplot[0], origplot[1], newplot[0], newplot[1]) - dist = str(format(dist, '.2f')) - print("Distance between points is ", dist) - print("destination: "+dest_lat+" "+dest_long) - print("future_time: "+future_time) - logfile.write(dtime+" homebase_lat="+orig_lat+" homebase_long="+orig_long+" dest_lat=" + - dest_lat+" dest_long="+dest_long+" future_time="+future_time+" dist="+dist) +timex = float(getfloat()) +x, y = create_random_point(latitude1, longitude1, meters_out) +future_time = random_date(current_time, window, timex) +dest_lat = str(format(x, ".5f")) +dest_long = str(format(y, ".5f")) +orig_lat = str(latitude1) +orig_long = str(longitude1) +newplot = (x, y) +origplot = (latitude1, longitude1) +dist = haversine(origplot[0], origplot[1], newplot[0], newplot[1]) +dist = str(format(dist, ".2f")) +logfile.write( + dtime + + " homebase_lat=" + + orig_lat + + " homebase_long=" + + orig_long + + " dest_lat=" + + dest_lat + + " dest_long=" + + dest_long + + " future_time=" + + future_time + + " dist=" + + dist +) +logfile.write("\n") - msg_breaker = '~' - msg_space = '`' - msg_space2 = '```' - # homage to the Matrix - init1_msg = 'Wake up, Neo...' - init_msg = 'The Matrix has you..' - rabbit_msg1 = 'follow the' - rabbit_msg2 = 'white rabbit...' +if args.matrix: + white_rabbit(future_time, dest_lat, dest_long) - logfile.write("\n") - print(init1_msg) - time.sleep(5) - print(msg_breaker) - print(init_msg) - time.sleep(5) - print(msg_breaker) - print(rabbit_msg1) - print(msg_breaker) - print(msg_space2) - print(rabbit_msg2) - time.sleep(5) - print(msg_breaker) - print(" "+future_time) - print(msg_breaker) - print(" "+dest_lat) - print(msg_space) - print(dest_long) - print("https://www.google.com/maps/search/?api=1&query="+dest_lat+","+dest_long+" Time: "+future_time) +print( + "https://www.google.com/maps/search/?api=1&query=" + + dest_lat + + "," + + dest_long + + " Time: " + + future_time +)