#!/usr/bin/python3
# coding=utf8
import sys, math
from kml import *
fn = "loxodroma"
long = 0 # výchozí geodetická délka - stupně
longStep = 5
maxSteps = 9999
lat = 87 # výchozí geodetická šířka - stupně
minPoleDiff = 1 # minimální vzdálenost od pólu - stupně
R = 6378 * 1000 # zemský poloměr v metrech
azim = 105
tilt = 60
range = 4800 * 1000 # metry
speed = 1000 * 1000 # m/s rychlost přesunu pohledu
durMin = 0.1 # secs minimální doba kroku
durMax = 1 # secs maximální doba kroku
def loxClong():
azimR = math.radians(azim)
latR = math.radians(lat)
longStepR = math.radians(longStep)
latNR = math.asin(math.tanh(longStepR / math.tan(azimR) + math.atanh(math.sin(latR))))
latN = math.degrees(latNR)
longN = canonGeodetic(long + longStep)
move = R * math.fabs(latNR - latR) / math.cos(azimR) # délka posunu na povrchu koule v metrech
dur = math.fabs(move) / speed # doba přeletu
if(dur < durMin): dur = durMin
elif(dur > durMax): dur = durMax
return (longN, latN, dur, move)
def list():
global long, lat
k = 0
while((90 - math.fabs(lat)) >= minPoleDiff and k < maxSteps):
(longN, latN, dur, move) = loxClong()
print('{}\t{}\t{}\t{}'.format(k,longN,latN, move))
long = longN
lat = latN
k = k + 1
def run():
global long, lat
k = 0
FlyTo.head(5, False)
LookAt.run(long, lat, 0, azim, tilt, range)
FlyTo.tail()
while((90 - math.fabs(lat)) >= minPoleDiff and k < maxSteps):
(longN, latN, dur, move) = loxClong()
FlyTo.head(dur, True)
comm('k={}, long={}, lat={}, longN={}, latN={}, move={}'.format(str(k), str(long), str(lat), str(longN), str(latN), str(move)))
k = k + 1
LookAt.run(longN, latN, 0, azim, tilt, range)
FlyTo.tail()
long = longN
lat = latN
# list()
tourProlog(fn)
run()
tourEpilog()