Last active
November 13, 2020 14:03
-
-
Save n0kovo/dbaa7eb5885abb490ea5a513a1296c88 to your computer and use it in GitHub Desktop.
Randonautica Quantum Blind Spot Implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
import math | |
import matplotlib.pyplot as plt | |
import quantumrandom | |
from global_land_mask import globe | |
import numpy as np | |
import argparse | |
import sys | |
earth_radius = 6371 # km | |
one_degree = earth_radius * 2 * math.pi / 360 * 1000 # 1° latitude in meters | |
def getOptions(args=sys.argv[1:]): | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--lat", help="Starting point latitude", required=True) | |
parser.add_argument("--long", help="Starting point longitude", required=True) | |
parser.add_argument("--rad", type=int, help="Radius in meters", required=True) | |
options = parser.parse_args(args) | |
return options | |
def random_point_in_disk(max_radius): | |
r = max_radius * quantumrandom.randint(0, 1) ** 0.5 | |
theta = quantumrandom.randint(0, 1) * 2 * math.pi | |
return r * math.cos(theta), r * math.sin(theta) | |
def random_location(lon, lat, max_radius): | |
dx, dy = random_point_in_disk(max_radius) | |
random_lat = lat + dy / one_degree | |
random_lon = lon + dx / (one_degree * math.cos(lat * math.pi / 180)) | |
return random_lon, random_lat | |
def link_from_coords(latlong): | |
lat, long = latlong | |
return f"https://www.google.com/maps/place/{lat}+{long}" | |
options = getOptions(sys.argv[1:]) | |
while True: | |
location = random_location( | |
float(options.lat), float(options.long), float(options.rad) | |
) | |
if globe.is_land(location[0], location[1]): | |
print(link_from_coords(location)) | |
break | |
else: | |
print("Got coordinates in water. Retrying.") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment