Make the damn thing work without voodoo.
Signed-off-by: Abdulkadir Furkan Şanlı <me@abdulocra.cy>
This commit is contained in:
		@@ -1,3 +1,5 @@
 | 
				
			|||||||
# pragmanauts
 | 
					# pragmanauts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
randonauting that might work for you
 | 
					randonauting that might work for you
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Code is stolen [from this guy](https://github.com/deckerEnigmatic)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										129
									
								
								naut.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								naut.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
				
			|||||||
 | 
					# !/usr/bin/python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from __future__ import division
 | 
				
			||||||
 | 
					from math import radians, cos, sin, asin, sqrt
 | 
				
			||||||
 | 
					import numpy as np
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					from time import strftime
 | 
				
			||||||
 | 
					import random
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# get a random enough number
 | 
				
			||||||
 | 
					def getfloat():
 | 
				
			||||||
 | 
					  output = random.random()
 | 
				
			||||||
 | 
						return output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def str_time_prop(start, end, format, prop):
 | 
				
			||||||
 | 
						#get a time at a proportion of a range of two formatted times
 | 
				
			||||||
 | 
						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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
						u = float(getfloat())
 | 
				
			||||||
 | 
						v = float(getfloat())
 | 
				
			||||||
 | 
					        w = r * np.sqrt(u)
 | 
				
			||||||
 | 
					        t = 2 * np.pi * v
 | 
				
			||||||
 | 
					        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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_start = time.time()
 | 
				
			||||||
 | 
					dtime = strftime("%m-%d-%Y %H:%M:%S")
 | 
				
			||||||
 | 
					newplot = ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### User defined variables #####
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loghandle = './naut.log'
 | 
				
			||||||
 | 
					logfile = open(loghandle, "a")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#home_base (starting point), set to Warsaw center.
 | 
				
			||||||
 | 
					latitude1, longitude1 = 52.229832,21.011734
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#window_secs = 10800
 | 
				
			||||||
 | 
					window_secs = 1800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#how far to travel in meters from home base
 | 
				
			||||||
 | 
					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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						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...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user